簡體   English   中英

大於或等於浮動失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM