加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-17 00:01:01 所属栏目:大数据 来源:网络整理
导读:为什么当我做以下事情? 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。 问题是
为什么当我做以下事情?
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。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读