2014-03-28 28 views
2

單一數據類型未按預期添加。有人可以向我解釋爲什麼它這樣做嗎?VB:單一數據類型不正確添加

的問題如下:

Dim h As Single 
h += CSng(703.35) 'result: h = 703.35 
h += CSng(703.35) 'result: h = 1406.7 
h += CSng(703.35) 'result: h = 2110.0498 WTF 
+0

浮點數學是一個近似值。 –

+1

如果您需要精確度,請改用'Decimal'。 –

+3

「編程技巧 精度當您使用浮點數時,請記住它們並不總是在內存中有精確的表示,這可能會導致某些操作(例如值比較和Mod運算符)的意外結果。有關更多信息,請參閱疑難解答數據類型(Visual Basic)。「 〜http://msdn.microsoft.com/en-us/library/xay7978z.aspx – Rich

回答

2

單一手段IEEE754。 IEEE754不能表達每一個值。你很有可能擁有IEEE754中不存在的值,並且你得到的結果是最接近的近似值。

如果您需要的值與我們肉類人類通常認爲的「確切」近似值相符(注意矛盾),您應該使用十進制數,而不是單數。

要清楚:十進制和單個都被迫近似 - 只有這麼多,你可以做,以適應這樣的範圍的可能值到有限的字節。但他們接近的方式是不同的。十進制適合離散度量,如金錢;雙倍適用於連續測量