Math.round四舍五入

在用Math.Round做数据处理的时候,经常遇到81.25保留一位小数,则为81.2的情况,经过材料查找,Math.Round四舍五入算法采用“银行家舍入(Banker‘s rounding)”,是IEEE规定的舍入标准,所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。其规则是:当舍去位的数值小于5时,直接舍去该位;当舍去位的数值大于等于6时,在舍去该位的同时向前位进一;当舍去位的数值等于5时,如果前位数值为奇,则在舍去该位的同时向前位进一,如果前位数值为偶,则直接舍去该位。
通过msdn了解到Math.Round重载列表

Math.Round (Decimal):将小数值舍入到最接近的整数。由 .NET Compact Framework 支持。

Math.Round (Double):将双精度浮点值舍入为最接近的整数。由 .NET Compact Framework 支持。

Math.Round (Decimal, Int32):将小数值舍入到指定精度。由 .NET Compact Framework 支持。

Math.Round (Decimal, MidpointRounding):将小数值舍入到最接近的整数。一个参数,指定当一个值正好处于另两个数中间时如何舍入这个值。

Math.Round (Double, Int32):将双精度浮点值舍入到指定精度。由 .NET Compact Framework 支持。

Math.Round (Double, MidpointRounding):将双精度浮点值舍入为最接近的整数。一个参数,指定当一个值正好处于另两个数中间时如何舍入这个值。

Math.Round (Decimal, Int32, MidpointRounding):将小数值舍入到指定精度。一个参数,指定当一个值正好处于另两个数中间时如何舍入这个值。

Math.Round (Double, Int32, MidpointRounding):将双精度浮点值舍入到指定精度。一个参数,指定当一个值正好处于另两个数中间时如何舍入这个值。

MSDN

下面通过一个例子了解具体情况

    Math.Round(0.145, 2, MidpointRounding.AwayFromZero)
    Math.Round(0.145, 2, MidpointRounding.ToEven)

运行结果:

    0.14
    0.14

很令人诧异的结果,这是因为我们调用的是Math.Round的double重载,需要调用decimal重载

    Math.Round((decimal)0.145, 2, MidpointRounding.AwayFromZero)
    Math.Round((decimal)0.145, 2, MidpointRounding.ToEven)

运行结果:

    0.15
    0.14

下面来看下:MidpointRounding

ToEven:当一个数字是其他两个数字的中间值时,会将其舍入为最接近的偶数。

AwayFromZero:当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较小的值。

在默认情况下都是使用ToEven,在上面的代码中可以发现。

在SQLServer数据库中也存在类似情况,在开发过程中,写了函数处理该情况,可以参考http://blog.csdn.net/mh942408056/article/details/8234320

时间: 2024-12-28 06:28:30

Math.round四舍五入的相关文章

JavaScript基础 Math.round() 四舍五入成整数

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ut

JS indexOf(),split(),substring(),substr(),Math.ceil(),Math.floor(),Math.round()的内容

indexOf(): var mystr="Hello WorHld!" 括号内若只有一个参数,代表要查找的字符:例:document.write(mystr.indexOf("H")); 括号内若有两个参数,前一个代表要查找的字符,后一个代表从哪个位置开始查找:例:document.write(mystr.indexOf("H",7)); 若要查找的字符没有,则返回-1 split():切割符 var mystr="86-010-85

WinCE的C#编程,对float型进行四舍五入保留两位小数,小数进行四舍五入操作,Math.Round的应用案例。

private  float ConvertFloat4Se5Ru(float flotValue) { int iValue = (int)Math.Round(flotValue * 10000); //小数点后两位前移,并四舍五入 flotValue = (float)(iValue / 10000.00f); return flotValue; } 申明:以上文字为"武汉汉码科技有限公司"原创,转载时务必注明出处. 技术分享,沟通你我,共同进步!www.hanma-scan.c

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

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

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 可以用来实现传统意义上

Javascript四舍五入(Math.round()与Math.pow())

代码 Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> &

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.

Math.round() 函数返回一个数字四舍五入后最接近的整数。

语法: Math.round(x); 参数:x 返回值:给定数字的值四舍五入到最接近的整数 描述: 如果参数的小数部分大于 0.5,则舍入到相邻的绝对值更大的整数. 如果参数的小数部分小于 0.5,则舍入到相邻的绝对值更小的整数.如果参数的小数部分恰好等于0.5,则舍入到相邻的在正无穷(+∞)方向上的整数.注意,与很多其他语言中的round()函数不同,Math.round()并不总是舍入到远离0的方向(尤其是在负数的小数部分恰好等于0.5的情况下). 因为round()是Math的静态方法,你