Math.Round 四舍五入问题 解惑 !

前言:

      一定要说 坑爹的微软! 坑爹的微软! 坑爹的微软!  重要的事情说 三遍 !

     

摘录 SMDN

      示例

 

下面的示例演示就近舍入。

 
Math.Round(3.44, 1); //Returns 3.4.
Math.Round(3.45, 1); //Returns 3.4.
Math.Round(3.46, 1); //Returns 3.5.

Math.Round(4.34, 1); // Returns 4.3
Math.Round(4.35, 1); // Returns 4.4
Math.Round(4.36, 1); // Returns 4.4

     MSDN 上显示  这就不是 四舍五入  这叫 五舍六入!

     重要的提示!  在  .NET 4.5 自后 该方法就成了标准的 四舍五入了!! 2.0 3.0 3.5 4.0 都是 五舍六入!

     
    解决办法 网上大神也给出过   

    摘录

  C#中小数点后保留两位小数,四舍五入的函数及使用方法

    2011-08-08 10:25 by 追忆似水流年, 14300 阅读, 2 评论, 收藏, 编辑

    Math.Round(45.367,2)     //Returns   45.37

    Math.Round(45.365,2)     //Returns   45.36

     C#中的Round()不是我们中国人理解的四舍五入,是老外的四舍五入,是符合IEEE标准的四舍五入,具体是四舍六入,下面的才是符合中国人理解的四舍五入

      Math.Round(45.367,2,MidpointRounding.AwayFromZero);//45.37

    Math.Round(45.365,2,MidpointRounding.AwayFromZero)     //Returns   45.37         

        这个是非得想 使用 该方法   的解决方法     但是!!!  有BUG !!  输入 1.015   得到的结果是 1.01      !!!!  其他的没问题。

    

       最终我建议不使用 这个方法  直接使用   ToString("F3")   Fn  n是几 就截取几位小数并且四舍五入!

此文章由人工翻译。 将光标移到文章的句子上,以查看原文。
译文
原文

Math.Round 方法 (Decimal, Int32)

.NET Framework 4
 
其他版本
 

 

将小数值按指定的小数位数舍入。

 

命名空间:  System
程序集:  mscorlib(在 mscorlib.dll 中)
语法
 
 
public static decimal Round(
	decimal d,
	int decimals
)

参数

d
类型:System.Decimal
要舍入的小数。
decimals
类型:System.Int32
返回值中的小数位数。

返回值

类型:System.Decimal
最接近 d 的 decimals 位小数的数字。
异常
 
异常条件
ArgumentOutOfRangeException

decimals 小于 0 或大于 28。

OverflowException

结果超出了 Decimal 的范围。

备注
 

decimals 参数指定返回值中的小数位数以及范围 0 和 28。 如果 decimals 等于零,则返回整数。

如果 d 中 decimals 小数位置右侧的第一位数字的值为 5,则 decimals 位置中的数字向上舍入(如果为奇数)或不变(如果为偶数)。 如果 d 的精度小于 decimals,则返回 d 而不做更改。

此方法的行为遵循 IEEE 标准 754 的第 4 节。 这种舍入有时称为就近舍入或四舍六入五成双。 它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。

若要控制 Round(Decimal, Int32) 方法使用的舍入类型,请调用 Decimal.Round(Decimal, Int32, MidpointRounding) 重载。

示例
 

下面的示例演示就近舍入。

 
Math.Round(3.44, 1); //Returns 3.4.
Math.Round(3.45, 1); //Returns 3.4.
Math.Round(3.46, 1); //Returns 3.5.

Math.Round(4.34, 1); // Returns 4.3
Math.Round(4.35, 1); // Returns 4.4
Math.Round(4.36, 1); // Returns 4.4

 

原文地址:https://www.cnblogs.com/atliwen/p/5455816.html