當除法結果爲無限重複的數字時,數字顯然會被截斷以適應小數點的大小。所以像1/3這樣的東西變得像0.3333333333333333333。如果我們將這個數字乘以3,那麼我們得到類似於0.999999999999999999而不是1的數據,就像我們將得到的數據的真實值保存一樣。小數如何處理無限重複的數字?
這是從上小數MSDN文章的這一個代碼示例:
decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor);
當值0.9999999999999999999與1相等相比,這導致一個問題。沒有精度的損失,它們將是平等的,但當然在這種情況下,比較會導致錯誤。
人們通常如何處理這個問題?除了爲每個比較定義一些誤差外,是否還有更優雅的解決方案?
@nathanhayfield看起來你錯過了這個問題的最後一句話。 –
儘管如此,那*就是這樣做的一般方式,無論是在位置上,還是在函數內部都有空白的情況下,或者讓你指定一個(這在可讀性方面會更優雅,但概念相同)。(不要忘記,如果你曾經向用戶展示過結果,也可能會看到一些可讀的結果,沒有人願意看到他們欠$ 1.99999999999。是的,我已經看到過這種情況,好幾次。) – neminem
這是一個古老而知名的問題在數字計算 –