2011-09-27 22 views
1

可能重複:
C# Maths gives wrong results!在C#乘以雙100導致意想不到的答案

我在我的C#Windows應用程序項目下面的代碼:

雙重考驗= 2.24 * 100;

如果我添加監視,測試,人們所期望的值是224,但它實際上是: 224.00000000000003

任何人都可以解釋其中的額外0.00000000000003從何而來?

+4

強制鏈接:http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html和http://en.wikipedia.org/wiki/IEEE_754-2008 – LukeH

+2

你是乘以雙打,而不是小數(如在標題預編輯中)。 – BoltClock

+0

同樣發生在我身上。我猜想某種舍入偏差。 –

回答

1

你得到結果是因爲2.24不是一個確切的數字。除了你提供的2以外,還有更重要的數字。我會嘗試100.00的乘法運算,然後只用3位有效數字進行整數。

我應該澄清,你需要使用decmial變量而不是double。一個double不能表示一個確切的值。

2

這是一個舍入誤差,不是所有的數字可以準確地在double

15

100在C#乘以一個十進制導致意想不到的答案

首先,你還沒有一個乘以小數 - 你乘以一個IEEE 754浮點100號

因爲2.24不存在爲double。但是,如果你這樣做:

decimal test = 2.24M * 100; 

它會表現得如您所願。

1

許多其他人已經解釋了這一點,比我更能雄辯。嘗試這些鏈接上尺寸:

Simple explanation

Advanced explanation

如果仍然讓你抓你的頭,因爲「每個程序員應該知道浮點運算什麼?」剛剛<插入喜歡的搜索引擎>

相關問題