我可能會錯過一些重要的東西,但我無法找到一種方法來'適當地'圍繞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