我需要打印或将浮点数转换为15个小数位字符串,即使结果中有许多尾随0,例如:1.6变成1.6000000000000000我尝试了round(6.2,15),但它返回6.2000000000000002添加了舍入错误我还在线上看到各种各样的人,他们将浮点数放入字符串中,然后手动添加尾随0,但这似乎很糟糕。做这个的最好方式是什么?
3 回答
互换的青春
TA贡献1797条经验 获得超6个赞
对于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
人到中年有点甜
TA贡献1895条经验 获得超7个赞
我想这实际上是将其放入字符串中,但这避免了舍入错误:
import decimal
def display(x):
digits = 15
temp = str(decimal.Decimal(str(x) + '0' * digits))
return temp[:temp.find('.') + digits + 1]
添加回答
举报
0/150
提交
取消