C#中的舍入浮点数(单个)数字

时间:2015-11-02 17:07:54

标签: c# math rounding

我理解浮点数的内存表示假设数字并不精确,但是我很惊讶我们在执行舍入时可能会出现一个非常重要的错误(注意浮点数预计会有精确度) 7和舍入是5)

?Math.Round(0.149705F, 5, MidpointRounding.AwayFromZero)

0.1497

虽然双重

完全没问题
?Math.Round(0.149705, 5, MidpointRounding.AwayFromZero)

0.14971

它也很完美

?Math.Round((decimal)0.149705F, 5, MidpointRounding.AwayFromZero)

因为我必须使用从一些遗留代码返回的浮点数,并且我需要将它完全舍入,因为它在一些遗留应用程序(COBOL)中舍入,将此值四舍五入为0.14971,我应用了类似这样的东西

 ?System.Math.Round(0.149705F + 0.00000001F, 5, System.MidpointRounding.AwayFromZero)

您知道更好的解决方案吗?

0 个答案:

没有答案