Math.Round()函数说明

Math.Round()并不是严格意义上的是四舍五入函数。它默认的执行的是"银行家舍入"算法,即四舍六入五取偶。概括为:四舍六入五考虑、五后非零就进一,五后皆零看奇偶,五前为偶应舍去、五前为奇要进一

当为5时,取离着最近的偶数。见下图:

测试代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace MathRoundTest

{

class Program

{

static void Main(string\[\] args)

{

Console.WriteLine(Math.Round(1234.5).ToString()); //输出:1234

Console.WriteLine(Math.Round(1234.50).ToString()); //输出:1234

Console.WriteLine(Math.Round(1235.5).ToString()); //输出:1236

Console.WriteLine(Math.Round(1235.50).ToString()); //输出:1236

Console.WriteLine("---------------------------------------------");

Console.WriteLine(Math.Round(-1234.5).ToString()); //输出:-1234

Console.WriteLine(Math.Round(-1234.50).ToString()); //输出:-1234

Console.WriteLine(Math.Round(-1235.5).ToString()); //输出:-1236

Console.WriteLine(Math.Round(-1235.5).ToString()); //输出:-1236

Console.WriteLine("---------------------------------------------");

Console.WriteLine(Math.Round(123.45, 1).ToString()); //输出:123.4

Console.WriteLine(Math.Round(123.55, 1).ToString()); //输出:123.6

Console.WriteLine("---------------------------------------------");

Console.WriteLine(Math.Round(-123.45, 1).ToString()); //输出:-123.4

Console.WriteLine(Math.Round(-123.55, 1).ToString()); //输出:-123.6

Console.WriteLine("---------------------------------------------");

Console.ReadLine();

}

}

}

如果要实现我们所需要的四舍五入,需要使用使用四舍五入策略参数:MidpointRounding.AwayFromZero (当为5时,取远离0的数值)。

测试代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace MathRoundTest

{

class Program

{

static void Main(string\[\] args)

{

Console.WriteLine(Math.Round(1234.5,MidpointRounding.AwayFromZero).ToString()); //输出:1235

Console.WriteLine(Math.Round(1234.50, MidpointRounding.AwayFromZero).ToString()); //输出:1235

Console.WriteLine(Math.Round(1235.5, MidpointRounding.AwayFromZero).ToString()); //输出:1236

Console.WriteLine(Math.Round(1235.50, MidpointRounding.AwayFromZero).ToString()); //输出:1236

Console.WriteLine("---------------------------------------------");

Console.WriteLine(Math.Round(-1234.5, MidpointRounding.AwayFromZero).ToString()); //输出:-1235

Console.WriteLine(Math.Round(-1234.50, MidpointRounding.AwayFromZero).ToString()); //输出:-1235

Console.WriteLine(Math.Round(-1235.5, MidpointRounding.AwayFromZero).ToString()); //输出:-1236

Console.WriteLine(Math.Round(-1235.5, MidpointRounding.AwayFromZero).ToString()); //输出:-1236

Console.WriteLine("---------------------------------------------");

Console.WriteLine(Math.Round(123.45, 1, MidpointRounding.AwayFromZero).ToString()); //输出:123.5

Console.WriteLine(Math.Round(123.55, 1, MidpointRounding.AwayFromZero).ToString()); //输出:123.6

Console.WriteLine("---------------------------------------------");

Console.WriteLine(Math.Round(-123.45, 1, MidpointRounding.AwayFromZero).ToString()); //输出:-123.5

Console.WriteLine(Math.Round(-123.55, 1, MidpointRounding.AwayFromZero).ToString()); //输出:-123.6

Console.WriteLine("---------------------------------------------");

Console.ReadLine();

}

}

}

相关推荐
SomeB1oody9 分钟前
【RustyML入门】5.2. 分类指标
开发语言·后端·机器学习·rust·教程
ZJU_统一阿萨姆27 分钟前
【推理优化进阶】图编译与运行时:动态形状、CUDA Graph 与内存规划
开发语言·人工智能·语言模型·架构·开源
@呱呱爱学习27 分钟前
C++大成之路_ STL容器_ Vector
开发语言·c++
码匠许师傅1 小时前
【C++ 面试真题】19. 聊聊 C++ 的迭代器
开发语言·c++·面试
AI情绪识别开源1 小时前
检信ALLEMOTION VibrationAI 2.4.0 12维度情绪识别开源源代码
开发语言·python
Dovis(誓平步青云)1 小时前
DevEco Studio 6.1.1 Windows 安装实录:从下载校验到首次启动
android·开发语言·数据库·人工智能·windows·harmonyos
qeen871 小时前
【数据结构】红黑树的算法原理解析与实现
开发语言·数据结构·c++·算法·红黑树
曹牧1 小时前
C#:取的多个药品批准文号中的一个
c#
Logintern092 小时前
什么时候应该用多进程什么时候用多线程呢?
开发语言·python
long3162 小时前
枚举(Enums)
java·开发语言·数据库