>>> num = 4.123456
>>> round(num, 3) # expecting 4.123
4.1230000000000002
结果我期待4.123,我错了吗?
答案 0 :(得分:7)
这不是一个错误。你需要阅读科学家应该知道的关于浮点运算的内容:
答案 1 :(得分:6)
是的,您的期望与您工具的设计意图不符。
查看Python教程的this section。
使用math.round
实际上非常罕见。如果您尝试将数字显示为某个精度的字符串,则可能需要更像
>>> num = 4.123456
>>> print "%.3f" % num
4.123
您可能对string formatting上的文档感兴趣。
答案 2 :(得分:4)
为什么要关心? (这是一个严肃的问题。)
你得到的答案非常接近4.123
而没有任何区别。它不能完全是4.123
,因为Python可以精确地表示有限的许多数字(在典型机器上大约2**64
),并且没有详细介绍浮点表示,它只是恰好4.123
不是其中之一。顺便说一下,4.1230000000000002
也不是可以准确表示的数字之一;存储的实际数字是4.12300000000000022026824808563105762004852294921875
,但Python将十进制表示截断为17位有效数字以用于显示目的。所以:
4.123
与你得到的数据之间的差异是如此微小,以至于没有真正的区别。只是不要担心。str
或字符串格式。decimal
模块。最后注意事项:在Python 3.x和Python 2.7中,浮点数的repr
已经发生变化,因此您实际上会得到4.123
,如您所愿。
答案 3 :(得分:2)
如果您希望拥有浮点数的完全表示,则必须使用decimal
。