我需要打印或将浮点数转换为15位小数字符串,即使结果有多个尾随0,例如:
1.6变为1.6000000000000000
我尝试了回合(6.2,15),但它返回了6.2000000000000002,添加了舍入错误
我还看到网上的各种各样的人把浮动放入一个字符串然后手动添加了尾随0但这看起来很糟糕......
这样做的最佳方式是什么?
答案 0 :(得分:60)
您可以使用str.format
方法。例子:
>>> print('{0:.16f}'.format(1.6))
1.6000000000000001
>>> print('{0:.15f}'.format(1.6))
1.600000000000000
注意第一个例子末尾的1
是舍入错误;之所以会发生这种情况是因为十进制数1.6的精确表示需要无穷多个二进制数字由于浮点数具有有限的位数,因此该数字四舍五入到附近但不相等的值。
您可以使用“模数格式化”语法(这也适用于Python 2.6和2.7):
>>> print '%.16f' % 1.6
1.6000000000000001
>>> print '%.15f' % 1.6
1.600000000000000
答案 1 :(得分:5)
浮点数缺乏精确度,无法准确地将“1.6”表示为多个小数位。舍入误差是真实的。你的号码实际上不是1.6。
答案 2 :(得分:4)
我想这实际上是把它放在一个字符串中,但这可以避免舍入错误:
import decimal
def display(x):
digits = 15
temp = str(decimal.Decimal(str(x) + '0' * digits))
return temp[:temp.find('.') + digits + 1]
答案 3 :(得分:4)
现代Python >=3.6
中最干净的方法是对string formatting使用f字符串:
>>> var = 1.6
>>> f"{var:.15f}"
'1.600000000000000'