print float到n个小数位,包括尾随0

jon*_*opf 33 python floating-point

我需要打印或将浮点数转换为15位小数字符串,即使结果有许多尾随0,例如:

1.6变为1.6000000000000000

我试过回合(6.2,15),但它返回6.2000000000000002,增加了舍入误差

我也看到网上的各种各样的人把浮动放入一个字符串,然后手动添加尾随0但这似乎很糟糕......

做这个的最好方式是什么?

Dav*_*ber 61

适用于2.6+和3.x的Python版本

您可以使用该str.format方法.例子:

>>> print('{0:.16f}'.format(1.6))
1.6000000000000001

>>> print('{0:.15f}'.format(1.6))
1.600000000000000
Run Code Online (Sandbox Code Playgroud)

注意1第一个例子的末尾是舍入误差; 之所以会发生这种情况是因为十进制数1.6的精确表示需要无穷多个二进制数字 由于浮点数具有有限的位数,因此该数字四舍五入到附近但不相等的值.

对于2.6之前的Python版本(至少回到2.0)

您可以使用"模数格式化"语法(这也适用于Python 2.6和2.7):

>>> print '%.16f' % 1.6
1.6000000000000001

>>> print '%.15f' % 1.6
1.600000000000000
Run Code Online (Sandbox Code Playgroud)


ruo*_*ola 8

现代 Python 中最简洁的方法>=3.6是使用带有字符串格式的 f字符串

>>> var = 1.6
>>> f"{var:.15f}"
'1.600000000000000'
Run Code Online (Sandbox Code Playgroud)

  • f 字符串确实让这些事情变得更容易。 (2认同)

dka*_*ins 5

浮点数缺乏精确度,无法准确地将"1.6"表示为多个小数位.舍入误差是真实的.你的号码实际上不是1.6.

查看:http://docs.python.org/library/decimal.html