[英]Greater than or equal for floats failed
我正在運行一個針對某些數據編寫的小型python測試,並得到了一些奇怪的結果。 歸結為:
priceDiff = 219.92 - 219.52
if(priceDiff >= .40):
print "YES"
else:
print "NO"
結果為“否”
為什么0.40不是> = .40?
從文檔
表示錯誤是指以下事實:某些(大多數,實際上)小數部分不能完全表示為二進制(基數2)分數。 這是Python(或Perl,C,C ++,Java,Fortran和其他許多語言)經常不顯示您期望的確切十進制數字的主要原因:
0.1 + 0.2
0.30000000000000004
Python提供了可控制的環境以“ Decimal ”的形式使用浮點數。 它提供了多個選項來控制/調整舍入,以及不同策略的舍入量。( https://docs.python.org/3.5/library/decimal.html#rounding-modes )。
from decimal import Decimal, ROUND_HALF_EVEN
a = Decimal(219.92).quantize(Decimal('.01'), rounding=ROUND_HALF_EVEN)
b = Decimal(219.52).quantize(Decimal('.01'), rounding=ROUND_HALF_EVEN)
priceDiff = a - b
cmp = Decimal(0.40).quantize(Decimal('.01'), rounding=ROUND_HALF_EVEN)
if priceDiff.compare(cmp) >= 0:
print "YES"
else:
print "NO"
print(d)
print(d2)
print(priceDiff)
print(cmp)
恕我直言,這是更好的可讀性,是對精度要求較高的應用程序的計算的實現。 希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.