首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MidpointRounding的Decimal.Round默认设置

MidpointRounding的Decimal.Round默认设置
EN

Stack Overflow用户
提问于 2013-03-14 17:39:00
回答 3查看 13.4K关注 0票数 22

以下情况适用:

var rounded = Decimal.Round(7.635m, 2);
//rounded: 7.63

对我来说,这是错误的和意想不到的行为。我假设四舍五入的值是7.64

要实现这一点,我可以这样做:

var rounded = Decimal.Round(7.635m, 2, MidpointRounding.AwayFromZero);
//rounded: 7.64

这个怎么可能不是Decimal.Round的默认行为呢?有什么好的理由吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-14 17:40:28

这怎么可能不是Decimal.Round的默认行为呢?有什么好的理由吗?

如果您查看Decimal.Round Method (Decimal)的文档

此方法的行为遵循IEEE754标准的第4节。这种舍入有时被称为“半舍五入”或“银行家舍入”。它最小化了由于在单个方向上一致地舍入中点值而导致的舍入误差。它等效于使用MidpointRounding.ToEven的模式参数调用MidpointRounding(Decimal,MidpointRounding)方法。

票数 19
EN

Stack Overflow用户

发布于 2013-03-14 17:41:27

来自Math.Round(Decimal, Int32)方法

这种方法的行为遵循IEEE754标准的第4节。这种舍入有时被称为四舍五入到最近,或银行家舍入。它最小化了由于在单个方向上一致地舍入中点值而导致的舍入误差。

此方法等效于在模式参数为MidpointRounding.ToEven的情况下调用Round方法。如果小数位右边的d中有一个非零数位,且其值为5,则小数位中的数字如果为奇数,则向上舍入;如果为偶数,则保持不变。如果d的小数位数少于小数位数,则返回d时保持不变。

票数 3
EN

Stack Overflow用户

发布于 2013-03-14 17:49:34

原因是他们实现了一种遵循IEEE标准754第4节的方法。这称为四舍五入,有时称为四舍五入。

这只是许多舍入方法中的一种,他们选择了这一种。请参阅:http://en.wikipedia.org/wiki/Bankers_rounding

有关更多信息,请访问:Why does .NET use banker's rounding as default?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15405667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档