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 方法提供了一个枚举选项 MidpointRounding.AwayFromZero 可以用来实现传统意义上的"四舍五入"。即: Math.Round(4.5, MidpointRounding.AwayFromZero) = 5。

Round(Decimal)
Round(Double)
Round(Decimal, Int32)
Round(Decimal, MidpointRounding)
Round(Double, Int32)
Round(Double, MidpointRounding)
Round(Decimal, Int32, MidpointRounding)
Round(Double, Int32, MidpointRounding)

如:

Math.Round(0.4) //result:0

Math.Round(0.6) //result:1

Math.Round(0.5) //result:0

Math.Round(1.5) //result:2

Math.Round(2.5) //result:2

Math.Round(3.5) //result:4

Math.Round(4.5) //result:4

Math.Round(5.5) //result:6

Math.Round(6.5) //result:6

Math.Round(7.5) //result:8

Math.Round(8.5) //result:8

Math.Round(9.5) //result:10

使用MidpointRounding.AwayFromZero重载后对比:

Math.Round(0.4, MidpointRounding.AwayFromZero); // result:0

Math.Round(0.6, MidpointRounding.AwayFromZero); // result:1

Math.Round(0.5, MidpointRounding.AwayFromZero); // result:1

Math.Round(1.5, MidpointRounding.AwayFromZero); // result:2

Math.Round(2.5, MidpointRounding.AwayFromZero); // result:3

Math.Round(3.5, MidpointRounding.AwayFromZero); // result:4

Math.Round(4.5, MidpointRounding.AwayFromZero); // result:5

Math.Round(5.5, MidpointRounding.AwayFromZero); // result:6

Math.Round(6.5, MidpointRounding.AwayFromZero); // result:7

Math.Round(7.5, MidpointRounding.AwayFromZero); // result:8

Math.Round(8.5, MidpointRounding.AwayFromZero); // result:9

Math.Round(9.5, MidpointRounding.AwayFromZero); // result:10

但是悲剧的是,如果用这个计算小数的话,就不灵了!!!

必须用第七个重载方法,
decimal Round(decimal d, int decimals, MidpointRounding mode)

这样计算出来的小数才是真正的中国式四舍五入!!

?Math.Round(526.925, 2)
526.92

?Math.Round(526.925, 2,MidpointRounding.AwayFromZero)
526.92

?Math.Round((decimal)526.925, 2)
526.92

?Math.Round((decimal)526.925, 2,MidpointRounding.AwayFromZero)
526.93

时间: 2024-08-10 23:30:47

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 方法提供了一个枚举选项 MidpointRounding.AwayFromZero 可以用来实现传统意义上

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

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

JavaSE8基础 Math.round 简单的四舍五入成整数

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0) code: package jizuiku1; public class Demo001 { public static void main(String[] args) { //Math.round 简单的四舍五入.还有一种四舍五入是 科学计算中的四舍六入五凑偶 规则复杂. //在大学中进行实验数据处理时,要用后者! Syste

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() 的真实含义

今天踩了一个坑 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的规范,因此所

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 作用:解析一个字符串,并返回一个整数,这里可以简单理解成返回舍去参数的小数部分后的

56.js中Math取整,四舍五入等

Math.abs() //Math.abs(x) x任意值 返回绝对值 Math.ceil()//Math.ceil(x) 向上取整,四舍五入 Math.cos()//余弦 Math.floor()//Math.floor(x) 向下取整 Math.max()// Math.max(...arg) 0个或多个参数返回最大的那个 Math.min()// Math.min(...arg) 0个或多个参数返回较小的那个 Math.pow()//Math.pow(2,3) 2的三次方 Math.ran

js的向上取整(Math.ceil)向下取整(Math.floor)四舍五入(Math.round)

<script language="javascript"> Math.floor(5.55) //向下取整 结果为5 Math.floor(5.99) //向下取整 结果为5 Math.ceil(5.21) //向上取整,结果为6 Math.ceil(5.88) //向上取整,结果为6 Math.round(5.78) //四舍五入 结果为6 Math.round(5.33) //结果为5 </script> 原文地址:https://www.cnblogs.

C# Math.Round

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