Significant figures in the decimal module

前端 未结 6 1709
花落未央
花落未央 2020-12-20 22:40

So I\'ve decided to try to solve my physics homework by writing some python scripts to solve problems for me. One problem that I\'m running into is that significant figures

6条回答
  •  醉话见心
    2020-12-20 23:19

    Just out of curiosity...is it necessary to use the decimal module? Why not floating point with a significant-figures rounding of numbers when you are ready to see them? Or are you trying to keep track of the significant figures of the computation (like when you have to do an error analysis of a result, calculating the computed error as a function of the uncertainties that went into the calculation)? If you want a rounding function that rounds from the left of the number instead of the right, try:

    def lround(x,leadingDigits=0): 
        """Return x either as 'print' would show it (the default) 
        or rounded to the specified digit as counted from the leftmost 
        non-zero digit of the number, e.g. lround(0.00326,2) --> 0.0033
        """ 
        assert leadingDigits>=0 
        if leadingDigits==0: 
                return float(str(x)) #just give it back like 'print' would give it
        return float('%.*e' % (int(leadingDigits),x)) #give it back as rounded by the %e format  
    

    The numbers will look right when you print them or convert them to strings, but if you are working at the prompt and don't explicitly print them they may look a bit strange:

    >>> lround(1./3.,2),str(lround(1./3.,2)),str(lround(1./3.,4))
    (0.33000000000000002, '0.33', '0.3333')
    

提交回复
热议问题