2011-09-20 76 views
2

是對C#小數類型的任何更容易上班,我們會直覺地想到比其他浮點類型的相等比較?C#小數類型平等

回答

5

我想這取決於你的直覺。我假設有些人會想到將1除以3​​作爲分數1/3的結果,而其他人會認爲更多地沿着「哦,1除以3不能用十進制數表示,必須決定保留多少位數字,讓我們以0.333爲單位「。

如果您以前一種方式思考,Decimal對您沒有多大幫助,但如果您以後一種方式思考,並在需要時明確四捨五入,則更有可能是「直覺上」沒有主題的操作以十進制舍入誤差,例如除以10,將表現得如你所料。對於大多數人來說,這比二進制浮點類型的行爲更直觀,其中2的冪運行得很好,但是10的冪沒有。

+0

-1因爲這不是真的回答這個問題,除了重新提供我以前的答案。 – Noldorin

+0

@Noldorin - 我不同意這是一個重複,因爲你的回答不包括二進制算術對大多數人來說不直觀的問題。另外,我不同意你回答「否」,認爲平等問題更有可能按預期工作。不要說使用平等是一個好主意,但看看例如由於數字類型爲二進制而導致問題的各種網站上的困惑Javascript用戶的數量 –

+0

與直觀無關......這僅僅是內部表示和完成方式,我將從MSDN中討論並引用。咩。 – Noldorin

4

基本上沒有。所述Decimal類型簡單地表示一個專門的排序,其被設計來減少舍入誤差特別是在底座10系統浮點數的。也就是說,Decimal的內部表示實際上是以10爲底(denary),而不是通常的二進制。因此,這對於貨幣計算來說是一種更合適的類型 - 儘管當然不限於這種應用。

MSDN page爲以下結構:

十進制值類型表示十進制數範圍從正到79,228,162,514,264,337,593,543,950,335負79,228,162,514,264,337,593,543,950,335。十進制值類型適用於需要大量重要整數和小數位並且沒有舍入誤差的財務計算。十進制類型並不排除舍入的需要。相反,它最大限度地減少了四捨五入造成的錯誤。例如,下面的代碼產生0.9999999999999999999999999999而不是1的結果。

十進制數是一個浮點值,它包含一個符號,一個數值(其中值中的每個數字位於0到9之間)以及一個縮放因子,用於指示分隔數字值的整數部分和小數部分的浮點小數點的位置。

+0

Ahem。爲什麼?這個答案完全正確,謝謝。 – Noldorin