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)