Python的ROUND_HALF_UP无法按预期工作

9

我似乎无法理解使用decimal类将2.775四舍五入到2.78的十进制文档。

import decimal
decimal.getcontext().prec = 7
print(decimal.Decimal(2.775).quantize(
    decimal.Decimal('0.00'), 
    rounding=decimal.ROUND_HALF_UP
))
>> 2.77 # I'm expecting 2.78

应该四舍五入为2.78,但我得到的结果是2.77。

编辑: 在Python 3.4上测试。


10
请使用字符串 "2.775",您的问题在于实际的浮点数值小于 2.775,事实上根本不是接近 2.78 一半的值。 - Wooble
好的,我应该想到这个!在这上面浪费了将近一个小时...请把这个作为答案发布,我会接受它。非常感谢! - Brownbay
1个回答

16
如果你向你的代码中添加一行内容,如下所示:
print (decimal.Decimal(2.775))

那么你就会明白为什么它向下取整了:

2.774999999999999911182158029987476766109466552734375

值为2.775的字面量作为double类型存储,精度有限。

如果您将其指定为字符串,则该值将被更准确地保留:

>>> import decimal

>>> print (decimal.Decimal(2.775))
2.774999999999999911182158029987476766109466552734375

>>> print (decimal.Decimal('2.775'))
2.775

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接