我需要檢查一下我的雙數是否可以被餘數分爲0.05。所以我這樣做:檢查double是否可以不分餘數
if (!double.TryParse(ProductPriceTextBox.Text, out price) || !(0 < price) || !(price%0.05==0.0))
的問題是,我productSku,則可以在硬幣由出0.05,0.1,0.2,0.5,1,2歐元。
因此,所有的產品的價格必須是:price%0.05==0
,那就是:
1歐元,1.5歐元,0.5歐元 - 通過 1.21歐元,0.01歐元 - 失敗。
但是編譯器提示我在:
(price%0.05==0.0)
浮點數平等運營商的比較。 prescision
的可能的損失不能找出失敗的原因...
我當然可以這樣做:
int priceInCents= price*100;
(priceInCents%5==0)
但我認爲有一個其他的方式。
浮點值往往不太準確。你會得到舍入錯誤。請閱讀* [每個計算機科學家應該知道的浮點運算](https://www.cl.cam.ac.uk/teaching/1011/FPComp/floatingmath.pdf)* – Richard
這種計算(涉及'==')不應該使用double或float而是decimal! (或可能是一個epsilon條件) – TaW
所以你說我應該使用美分來檢查這種 – Cheese