我在我的C#Windows應用程序項目下面的代碼:
雙重考驗= 2.24 * 100;
如果我添加監視,測試,人們所期望的值是224,但它實際上是: 224.00000000000003
任何人都可以解釋其中的額外0.00000000000003從何而來?
我在我的C#Windows應用程序項目下面的代碼:
雙重考驗= 2.24 * 100;
如果我添加監視,測試,人們所期望的值是224,但它實際上是: 224.00000000000003
任何人都可以解釋其中的額外0.00000000000003從何而來?
你得到結果是因爲2.24不是一個確切的數字。除了你提供的2以外,還有更重要的數字。我會嘗試100.00的乘法運算,然後只用3位有效數字進行整數。
我應該澄清,你需要使用decmial變量而不是double。一個double不能表示一個確切的值。
這是一個舍入誤差,不是所有的數字可以準確地在double
這表示是由設計行爲,這是多麼的浮點數工作 - 精度實際上是有限的。見Floating Point Numbers - Accuracy Problems
100在C#乘以一個十進制導致意想不到的答案
首先,你還沒有一個乘以小數 - 你乘以一個IEEE 754浮點100號
因爲2.24不存在爲double
。但是,如果你這樣做:
decimal test = 2.24M * 100;
它會表現得如您所願。
許多其他人已經解釋了這一點,比我更能雄辯。嘗試這些鏈接上尺寸:
如果仍然讓你抓你的頭,因爲「每個程序員應該知道浮點運算什麼?」剛剛<插入喜歡的搜索引擎>
強制鏈接:http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html和http://en.wikipedia.org/wiki/IEEE_754-2008 – LukeH
你是乘以雙打,而不是小數(如在標題預編輯中)。 – BoltClock
同樣發生在我身上。我猜想某種舍入偏差。 –