2015-09-08 53 views
-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

我相信這個問題是不是四捨五入,而是乘法。

+0

你應該檢查此https://msdn.microsoft.com/en-us/library/system.midpointrounding(v=vs.110).aspx – Nic

+0

對於反對票不是我投票。您可能需要首先收集3個精度,然後收集2個精度。 double a = 39.3; double b = 0.95; Response.Write(Math.Round(Math.Round(a * b,3),2)); – Nic

+0

感謝您的建議。在這種情況下,我可能是幸運的,因爲我不知道到底有多少精度需要先輪迴,然後才能回到2. 目前我只是ToString()並將其解析爲double解決問題。但我真的很想知道爲什麼和更好/合適的解決方法。 – Atlantiz8

回答

0

在我明白爲什麼會發生這種情況。我給自己一個解決方法,可能可以幫助別人,以防他們遇到同樣的問題。無論如何它看起來很髒。

double price = 39.3; 
double m = 0.95; 

double result = 39.3 * 0.95; 
result = double.Parse(result.ToString()); 

result = Math.Round(result, 2, MidpointRounding.AwayFromZero); 

這樣我得到37.335乘以後,我得到37.34後舍入到2小數。