我正在尝试将添加的输出显示为超过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
如何打印完整的号码? 如果这是一个函数,我怎么能返回完整的数字?
答案 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'