-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