2015-09-08 51 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小数。