2

我正在尝试将我的加法输出显示到小数点后 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

4 回答 4

5

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

从函数返回数字时,您总是得到完整的精度。

要打印更多数字(如果可用),请使用字符串格式

print '%f' % range_key  # prints 1347053958.526874

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

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

或者,python 也提供了一种更新的字符串格式化方法

print '{0:.10f}'.format(range_key)  # prints 1347053958.5268740654
于 2012-09-07T21:33:32.303 回答
3

你已经有了完整的号码。在输出上使用自定义格式说明符。

>>> print '%.15f' % range_key
1347053222.790798902511597
于 2012-09-07T21:33:22.687 回答
0

您会发现,如果您对要打印的位数进行硬编码,有时您会得到太少或更糟,但会超出浮点精度并在最后得到无意义的数字。标准浮点数的精度只有大约 15 位。你可以用这个简单的公式找出小数点右边有多少位数字:

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

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

fmt = '%%0.%df' % max(0, digits_right)
于 2012-09-07T22:02:13.070 回答
0
>>> f = 1/7.
>>> repr(f)
'0.14285714285714285'
>>> str(f)
'0.142857142857'
>>> f
0.14285714285714285
>>> print f
0.142857142857
>>> '%.15f' % f
'0.142857142857143'
于 2012-09-07T22:02:58.483 回答