任何人都可以向我解释这段代码:
>>> round(0.45, 1)
0.5
>>> round(1.45, 1)
1.4
>>> round(2.45, 1)
2.5
>>> round(3.45, 1)
3.5
>>> round(4.45, 1)
4.5
>>> round(5.45, 1)
5.5
>>> round(6.45, 1)
6.5
>>> round(7.45, 1)
7.5
>>> round(8.45, 1)
8.4
>>> round(9.45, 1)
9.4
更新
我猜这是因为浮动表示。我是对的吗?
答案 0 :(得分:8)
你是对的。没有数字可以准确表示。在某些情况下,小数部分严格地大于0.45
,在某些情况下严格地小于:{/ p>
In [4]: ['%.20f' % val for val in (0.45, 1.45, 2.45, 3.45, 4.45, 5.45, 6.45, 7.45, 8.45, 9.45)]
Out[4]:
['0.45000000000000001110',
'1.44999999999999995559',
'2.45000000000000017764',
'3.45000000000000017764',
'4.45000000000000017764',
'5.45000000000000017764',
'6.45000000000000017764',
'7.45000000000000017764',
'8.44999999999999928946',
'9.44999999999999928946']
这解释了看似不一致的四舍五入。
答案 1 :(得分:0)
因为NPE表示十进制数的二进制表示不精确,所以你可以通过舍入得到奇怪的行为,解决这个问题的模块是十进制的, Here is the official documentation