C#中Math.Round() 的真实含义

今天踩了一个坑

Math.Round()函数取四舍五入发现不对,3/2 = 2, 5/2 = 2

网上搜了一下:http://www.cnblogs.com/fanyong/archive/2013/05/30/chinese_round.html

C#中的Math.Round()并不是使用的"四舍五入"法。其实在VB、VBScript、C#、J#、T-SQL中Round函数都是采用Banker‘s rounding(银行家算法),即:四舍六入五取偶。事实上这也是IEEE的规范,因此所有符合IEEE标准的语言都应该采用这样的算法。

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

原文地址:https://www.cnblogs.com/shuoli/p/8440906.html

时间: 2024-10-02 19:01:52

C#中Math.Round() 的真实含义的相关文章

C#中Math.Round()实现中国式四舍五入

原文:C#中Math.Round()实现中国式四舍五入 C#中Math.Round()实现中国式四舍五入 C#中的Math.Round()并不是使用的"四舍五入"法.其实在VB.VBScript.C#.J#.T-SQL中Round函数都是采用Banker's rounding(银行家算法),即:四舍六入五取偶.事实上这也是IEEE的规范,因此所有符合IEEE标准的语言都应该采用这样的算法. .NET 2.0 开始,Math.Round 方法提供了一个枚举选项 MidpointRound

C#中Math.Round()实现中国式四舍五入(转)

C#中Math.Round()实现中国式四舍五入 C#中的Math.Round()并不是使用的"四舍五入"法.其实在VB.VBScript.C#.J#.T-SQL中Round函数都是采用Banker's rounding(银行家算法),即:四舍六入五取偶.事实上这也是IEEE的规范,因此所有符合IEEE标准的语言都应该采用这样的算法. .NET 2.0 开始,Math.Round 方法提供了一个枚举选项 MidpointRounding.AwayFromZero 可以用来实现传统意义上

js中Math.round、parseInt、Math.floor和Math.ceil小数取整总结(转)

js中Math.round.parseInt.Math.floor和Math.ceil小数取整总结 Math.round.parseInt.Math.floor和Math.ceil 都可以返回一个整数,具体的区别请看下面的总结. 一.Math.round 作用:四舍五入,返回参数+0.5后,向下取整. 如: Math.round(5.57) //返回6 Math.round(2.4) //返回2 Math.round(-1.5) //返回-1 Math.round(-5.8) //返回-6 二.

C#中Math.Round()的中国式用法

C#中的Math.Round()并不是使用的"四舍五入"法.而是(银行家算法),即:四舍六入五取偶.事实上这也是IEEE的规范,因此所有符合IEEE标准的语言都应该采用这样的算法. .NET 2.0 开始,Math.Round 方法提供了一个枚举选项 MidpointRounding.AwayFromZero 可以实现传统意义上的"四舍五入".即: Math.Round(4.5, MidpointRounding.AwayFromZero) = 5. 如: Math

js中Math.round、parseInt、Math.floor和Math.ceil小数取整总结

Math.round.parseInt.Math.floor和Math.ceil 都可以返回一个整数,具体的区别请看下面的总结. 一.Math.round 作用:四舍五入,返回参数+0.5后,向下取整. 如: Math.round(5.57) //返回6 Math.round(2.4) //返回2 Math.round(-1.5) //返回-1 Math.round(-5.8) //返回-6 二.parseInt 作用:解析一个字符串,并返回一个整数,这里可以简单理解成返回舍去参数的小数部分后的

C# Math.Round

C#中Math.Round()方法默认重载实现的不是常有的四舍五入方法,而是四舍六入五求偶方法(也叫四舍六入五成双). 一.四舍六入五成双 四舍六入五成双是一种比较精确比较科学的计数保留法,是一种数字修约规则. 这一方式的另一个常见名称为“银行家舍入”,是IEEE754标准_百度百科的推荐舍入标准. 具体规则如下: 1. 被修约的数字小于5时,该数字舍去: 2. 被修约的数字大于5时,则进位: 3. 被修约的数字等于5时,要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数字都成

[小技巧]你真的了解C#中的Math.Round么?

原文:[小技巧]你真的了解C#中的Math.Round么? 今天在某.NET Core 群中看到有人在问Math.Round的问题.其实这个问题之前有很多人遇到了,在此总结一下. 开发者为了实现小数点后 2 位的四舍五入,编写了如下代码, Copy var num = Math.Round(12.125, 2); 代码非常的简单,开发者实际得到的结果是12.12, 这与其所预期的四舍五入结果12.13相悖. 其实产生这个结果的原因是由于Math.Round 默认使用的并非是四舍五入的原则,而是四

java中常用到的math方法(Math.PI、Math.random()、Math.abs(double)、Math.floor(double)、Math.ceil(double)、Math.round(double))

public class MathDemo { public static void main(String args[]){ /** * abs求绝对值 */ System.out.println(Math.abs(-10.4));    //10.4 System.out.println(Math.abs(10.1));     //10.1 /** * ceil天花板的意思,就是返回大的值,注意一些特殊值 */ System.out.println(Math.ceil(-10.1));  

JavaScript中的Math.ceil()、Math.round()、Math.floor()

1. Math.ceil():向上取整(指取大于该浮点数的最小整数) 2. Math.round():四舍五入取整(注意:当该浮点数距离两端整数一样时,取较大的那个整数,如Math.round(-1.5)=-1) 3. Math.floor():向下取整(指取小于该浮点数的最大整数)