我理解浮点数的内存表示假设数字并不精确,但是我很惊讶我们在执行舍入时可能会出现一个非常重要的错误(注意浮点数预计会有精确度) 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)
您知道更好的解决方案吗?