为了账号安全,请及时绑定邮箱和手机立即绑定

打印浮点数到n个小数位,包括尾随0

打印浮点数到n个小数位,包括尾随0

慕慕森 2019-11-18 18:19:20
我需要打印或将浮点数转换为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


查看完整回答
反对 回复 2019-11-18
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我想这实际上是将其放入字符串中,但这避免了舍入错误:


import decimal


def display(x):

    digits = 15

    temp = str(decimal.Decimal(str(x) + '0' * digits))

    return temp[:temp.find('.') + digits + 1]


查看完整回答
反对 回复 2019-11-18
  • 3 回答
  • 0 关注
  • 391 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信