将变量的输出显示为超过2个小数位

时间:2012-09-07 21:30:12

标签: python floating-point precision

我正在尝试将添加的输出显示为超过2位小数。

import time
import random

max_number = 1000000.0
random_time = random.randrange(1, max_number-1) / max_number
range_key = int(time.time()) + random_time

range_key
>>> 1347053222.790799

print range_key
>>> 1347053222.79

如何打印完整的号码? 如果这是一个函数,我怎么能返回完整的数字?

4 个答案:

答案 0 :(得分:5)

当将float转换为字符串时(打印自动执行此操作),python将其限制为仅有12个最高位数加上小数点。

从函数返回数字时,您始终可以获得完整的精度。

要打印更多数字(如果有),请使用string formatting

print '%f' % range_key  # prints 1347053958.526874

默认为6位数,但您可以指定更高的精度:

print '%.10f' % range_key  # prints 1347053958.5268740654

或者,python也提供了更新的string formatting method

print '{0:.10f}'.format(range_key)  # prints 1347053958.5268740654

答案 1 :(得分:3)

您已拥有完整的号码。在输出中使用自定义格式说明符。

>>> print '%.15f' % range_key
1347053222.790798902511597

答案 2 :(得分:0)

你会发现,如果你硬编码要打印的数字位数,你有时会得到太少或更糟,但仍然超过浮点精度并在最后得到无意义的数字。标准浮点数的精度仅为15位左右。您可以通过以下简单公式找出小数点右侧有多少这些数字:

digits_right = 14 - int(math.log10(value))

使用它,您可以创建适当的%f格式:

fmt = '%%0.%df' % max(0, digits_right)

答案 3 :(得分:0)

>>> f = 1/7.
>>> repr(f)
'0.14285714285714285'
>>> str(f)
'0.142857142857'
>>> f
0.14285714285714285
>>> print f
0.142857142857
>>> '%.15f' % f
'0.142857142857143'