.net – 需要帮助,舍入到2位小数

前端之家收集整理的这篇文章主要介绍了.net – 需要帮助,舍入到2位小数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么当我做以下事情?
Math.Round(0.75,1,MidpointRounding.AwayFromZero)

我得到0.8

但是当我执行以下操作

Math.Round(0.575,2,MidpointRounding.AwayFromZero)

我没有得到0.58。相反,我得到0.57。我想要任何5和四舍五入,所以0.575应该是0.58。

问题是,您不能将0.575正好代表二进制浮点数(例如双精度)。虽然我不太清楚,似乎最接近的表示可能只是稍低一点,所以当舍入它使用真实的表示和舍入。

如果要避免此问题,请使用更合适的数据类型。小数将会做你想要的:

Math.Round(0.575M,MidpointRounding.AwayFromZero)

结果:0.58

因为它是简单的1/2 1/4(即2 ^ -1 2 ^ -2),所以0.75的正确的事情是容易在二进制浮点表示。一般来说,两个幂的有限和可以用二进制浮点来表示。例外情况是当你的力量超过2范围(例如2 ^ 100 2不完全可表示)时。

编辑添加

Formatting doubles for output in C#可能在理解为什么它很难理解0.575不是真的0.575的兴趣。 DoubleConverter在接受的答案将显示0.575作为一个精确的字符串是0.5749999999999999555910790149937383830547332763671875你可以看出,为什么舍入给0.57。

猜你在找的VB相关文章