我一直在爭取C#中的十進制精度來自一個SQL十進制(38,30),並且我終於把它變成了一個四捨五入的奇怪。我知道我可能忽略了這裏的明顯,但我需要一點洞察力。是C#十進制舍入不一致嗎?
我遇到的問題是,C#不會產生我認爲是一致的輸出。
decimal a = 0.387518769125m;
decimal b = 0.3875187691250002636113061835m;
Console.WriteLine(Math.Round(a, 11));
Console.WriteLine(Math.Round(b, 11));
Console.WriteLine(Math.Round(a, 11) == Math.Round(b, 11));
息率
0.38751876912
0.38751876913
False
呃,0.38751876913?真?我在這裏錯過了什麼?
從MSDN:
如果小數位置中的數字爲奇數,它被改變成偶數位。否則,保持不變。
爲什麼我看到不一致的結果?額外的精度不會改變「在小數位數字」 ......
它向下舍入的值<= 0.5,> 0.5的值。 (即「0.50000」被取整,「0.50002 ...」被取整) - 這不是你期望的嗎?請參閱http://msdn.microsoft.com/en-us/library/ms131274.aspx – 2012-04-12 16:13:36
@Jason Williams:不完全。如果小於0.5,則向下舍入,如果> 0.5,則向上舍入,然後如果== 0.5則使用銀行家舍入。 – jason 2012-04-12 16:21:58
您期待的圓形函數可以舍入*更遠的數字*?你能解釋爲什麼你會期望在任何情況下? (這不是一個反問題的問題,我有興趣瞭解爲什麼人們會相信很奇怪的東西,這個問題其實很常見,但我仍然不明白爲什麼那麼多人認爲* round *應該圍繞* number更遠*) – 2012-04-12 16:35:18