我有一个关于以下计算的问题:
>>> print(float('32.31') * 1e9)
32310000000.000004
我需要这个结果是32310000000.0
(没有假小数位)。当直接使用浮点时,也会发生这种情况:
>>> print(32.31 * 1e9)
32310000000.000004
有没有办法避免错误的小数位?分析字符串并四舍五入到小数位数不是一个好的解决方案。
在此之前,非常感谢您。
注意:以下代码工作正常:
>>> print(32.32 * 1e9)
32320000000.0
所以我真的很高兴在测试过程中发现了上面的问题。
编辑:感谢您的快速回答!对不起,我漏掉了一个重要的问题。该方法还必须适用于结果小于1的情况,例如:
32.31 * 1e-9
在这种情况下,我不能使用round(32.31 * 1e-9, 1)
发布于 2019-06-04 02:47:07
如果您只对打印一个小数位感兴趣,则可以通过指定小数后的数字来使用round
,在本例中为1
print(round(float('32.31') * 1e9, 1))
# 32310000000.0
发布于 2019-06-04 02:49:22
这是由于浮点数的二进制尾数的表示限制造成的。32.31不能用除以2的幂来表示。如果您知道您的值始终是整数(或已知的小数位数),则可以使用round()
或int(round())
来绕过限制。
发布于 2019-06-04 02:55:41
我将假设您使用的是Python 3。
如果您只关心打印结果,请使用字符串格式:
print("{r:1.2f}".format(r=32.31 * 1e9))
另一种方法是使用旧的格式语法:
print("%1.1f" % (32 * 1e9))
我更喜欢第一种,但两种都行。
https://stackoverflow.com/questions/56432905
复制相似问题