【发布时间】:2015-04-24 08:54:04
【问题描述】:
展示我的用例的示例:
from __future__ import division
a = 215 / 4
print a # Case 1. Should print 53.75
a = 215 / 3
print a # Case 2. Should print 71.6666666666666714 i.e. decimal to 16 precision.
不起作用的可能解决方案:
print str(a) # Case 2 gets printed with only 12 precision (needed 16)
print repr(a) # Case 2 gets printed as 71.66666666666667 (precision 14, needed 16)
print '{0:.16f}'.format(a) # Case 1 gets printed with trailing zeroes
print '{0:.16g}'.format(a) # Decimal precision is 14, needed 16.
最好的 Pythonic 解决方案是什么?
编辑:如果 16 的精度是 float 除法的限制,那么获得 8 位小数精度的 Python 方法是什么。有没有更好的解决方案。比'{0:.8f}'.format(a).rstrip('0')?
【问题讨论】:
-
精度实际上不是16位,因为如您所见,它以
714结尾,这是不正确的。 -
当浮点数实际上没有 16 位精度时,为什么要显示 16 位?
-
这是否意味着浮点除法不能得到 18 位有效数字(包括 16 位精度)?
-
18 位有效数字是完全不可能的。我所说的精度是有效数字的数量,而浮点数略低于 16。如果您需要更多有效数字,请考虑使用
decimal.Decimal进行计算。 -
没有。本着编程的精神,我们这样做是因为我们可以。它不需要实用。如果他想知道怎么做,这里就是提问的地方。
标签: python format decimal repr