C# Math.Round()的银行家算法

c# 中 Math.Round(2.5) 运行结果是2 你敢相信吗?

上源码:

 public static void Cs4()
        {

            // 输出内容到控制台
            Console.WriteLine("请输入第一个字符串:");

            // 接收用户输入,为变量赋值
            string firstStr = Console.ReadLine();


            while (true)
            {
                string str = Console.ReadLine();

                if (string.IsNullOrEmpty(str))
                {
                    continue;
                }

                string fpje = Math.Round(double.Parse(str), 0, MidpointRounding.AwayFromZero).ToString();

                string fpje1 = Math.Round(double.Parse(str)).ToString();

                Console.WriteLine("有枚举------" + fpje);
                Console.WriteLine("无枚举------" + fpje1);

            }
        }

 

运行结果

 

 

 

 上面情况是真实存在的  也就是所谓的Math.Round()的银行家算法;

具体介绍参考:https://www.cnblogs.com/war-hzl/p/10984954.html

自我理解 在运行Math.Round()函数时 保留位数后面一位是5的时候有两种不同情况:

(1) 保留位数最后一位是偶数:直接舍去,保留位数最后一位不会+1

(2)保留位数最后一位是奇数:会执行四舍五入的规则

为了避免这种情况使得层序数据异常 解决方法如下:

.NET 2.0 开始,Math.Round 方法提供了一个枚举选项 MidpointRounding.AwayFromZero 可以用来实现传统意义上的"四舍五入"

列: Math.Round(double.Parse(str), 0, MidpointRounding.AwayFromZero)

posted @ 2020-12-15 14:13  求路问道  阅读(157)  评论(0编辑  收藏  举报