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

时间:2011-12-19 22:10:51

标签: python floating-point

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

1.6变为1.6000000000000000

我尝试了回合(6.2,15),但它返回了6.2000000000000002,添加了舍入错误

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

这样做的最佳方式是什么?

4 个答案:

答案 0 :(得分:60)

适用于2.6+和3.x

的Python版本

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

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

>>> print('{0:.15f}'.format(1.6))
1.600000000000000

注意第一个例子末尾的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

答案 1 :(得分:5)

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

退房:http://docs.python.org/library/decimal.html

答案 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'