當鑄造小數變成雙倍時,我遇到了一個奇怪的問題。鑄造小數變成雙倍的奇怪行爲
下面的代碼返回true:
Math.Round(0.010000000312312m, 2) == 0.01m //true
然而,當我投這加倍返回false:
(double)Math.Round(0.010000000312312m, 2) == (double)0.01m //false
,當我想用Math.Pow我已經經歷過這個問題,由於沒有Math.Pow超載,所以被迫將十進制數轉換爲double。
這是記錄的行爲?如果我被迫將小數點數加倍,我該如何避免它?從Visual Studio
截圖:
鑄造Math.Round翻倍我下面的結果:
(double)Math.Round(0.010000000312312m, 2) 0.0099999997764825821 double
(double)0.01m 0.01 double
UPDATE
好吧,我再現問題如下:
- 當我運行WPF應用程序並檢查剛剛啓動後的手錶輸出時,我得到了真正的空項目。
- 有一部分應用程序將值從滑塊發送到計算算法。我得到錯誤的結果,我把計算方法上的斷點。現在,當我查看觀察窗口中的值時,我得到了錯誤(沒有任何修改,我只是刷新觀察窗口)。
- 只要我在一些較小的項目中重現問題,我會在這裏發佈。
UPDATE2
不幸的是,我無法在較小的項目重現該問題。我認爲埃裏克的答案解釋了原因。
你的第二條語句也返回'true'。 – Rotem
你不應該使用平等檢查雙重使用一些epsilon值 – ne2dmar
第二個聲明對我來說也是如此,在VS2012,.NET 4.0 – Jonesopolis