我可能会错过一些重要的东西,但我无法找到一种方法来'适当地'围绕Python中的浮点数/小数点(2.7),至少保留三位小数。 “适当”我的意思是1.2225应该到1.223,1.2224应该到1.222。'正确'四舍五入到Python,到小数点后三位
我知道round
不会为在Python彩车工作,通过设计,但我似乎无法得到Decimal
表现不如预期,也不是ceil
功能。最好是寻找内置功能而非自定义功能解决方法,但对两者均开放。
>>> x = 1.2225 # expected: 1.223
>>> round(x, 3)
1.222 # incorrect
>>> from math import ceil
>>> ceil(x * 1000.0)/1000.0
1.223 # correct
>>> y = 1.2224 # expected: 1.222
>>> ceil(y * 1000.0)/1000.0
1.223 # incorrect
>>> from decimal import Decimal, ROUND_UP, ROUND_HALF_UP
>>> x = Decimal(1.2225)
>>> x.quantize(Decimal('0.001'), ROUND_UP)
Decimal('1.223') # correct
>>> y = Decimal(1.2224)
>>> y.quantize(Decimal('0.001'), ROUND_UP)
Decimal('1.223') # incorrect
>>> y.quantize(Decimal('0.001'), ROUND_HALF_UP)
Decimal('1.222') # correct
>>> x.quantize(Decimal('0.001'), ROUND_HALF_UP)
Decimal('1.222') # incorrect
有没有办法得到想要的结果?
IDK的为什么你会想到小区** **的1222.4是1222 ... –
@Antti OP只是寻找一种方式做“正确的”四舍五入。这个“ceil”例子只是一种表明“ceil”不能正确完成工作的方式。这并不意味着OP不理解为什么是这样。 – poke
重新打开该问题。 OP表示,他们知道,其设计“圆”不是解决方案。所以[链接的问题](http://stackoverflow.com/questions/18473563/python-incorrect-rounding-with-floating-point-numbers)不是真的有帮助。相反,OP似乎在问如何用小数来正确解决这个问题(以及为什么试图解决方案不起作用)。 – poke