-1
倍增2倍後,它獲得了很多額外的精度。然後它會導致四捨五入(至2位十進制)問題。我想要得到37.34,但它得到37.33。 (在調試模式下觀看)c#雙倍乘得到額外的精度
additional precision http://s8.postimg.org/9nn2bbiab/precision.jpg
任何想法,爲什麼?以及如何解決?
編輯
我其實確實嘗試了MidpointRounding。試試這個任何計算器它應該給你準確的37.335 但是C#給了我37.334999999999,後來在兩位小數四捨五入後導致錯誤的答案。
still rounded wrongly http://s28.postimg.org/psi2dz59n/precision2.jpg
我相信這個問題是不是四捨五入,而是乘法。
你應該檢查此https://msdn.microsoft.com/en-us/library/system.midpointrounding(v=vs.110).aspx – Nic
對於反對票不是我投票。您可能需要首先收集3個精度,然後收集2個精度。 double a = 39.3; double b = 0.95; Response.Write(Math.Round(Math.Round(a * b,3),2)); – Nic
感謝您的建議。在這種情況下,我可能是幸運的,因爲我不知道到底有多少精度需要先輪迴,然後才能回到2. 目前我只是ToString()並將其解析爲double解決問題。但我真的很想知道爲什麼和更好/合適的解決方法。 – Atlantiz8