C# Math.Round()函数问题
2014-03-03 11:26
274 查看
Math.Round
1、取指定位数的小数。
例如:
2、Math.Round ()在四舍五入时有个问题:
2.5应该等于3才对!
Math.Round()准确的说,这个函数不是四舍五入,而是四舍六入五凑偶,就是说小于4或大于6的该舍该入是没有争议的,而5处在正中间,如果四舍五入则会造成数据的整体偏差,所以采取的原则是:如果舍入位为5,则舍入后最后一位为偶数,这是国际惯例。
由来:
对于0-9这10个数字来说,他们出现在某一位的几率是相等的。在金融结算中,如果单纯的使用四舍五入,那么,入参(5-9)会比舍参(0-4)多一个,也就是说,金融机构会亏本,考虑到这种情况,也为了舍入更加公平,出现了就近舍入。既然每一位出现0-9的几率相等,那么,该位是偶数还是奇数的几率也就相等,对于舍弃位,0-4舍,6-9进没有什么疑义,主要就在于对中间数5的处理。此时,决定5是否舍弃交由它的前一位决定,如果前一位是偶,则舍弃,如果前一位是奇,则进位,如此,就实现了大致公平的舍入处理。
按照银行家舍入,考虑11.5和-11.5, 对于11.5,5前边是奇数1,故进位,结果为12;对于-11.5,变成了-12。因此,该舍入应该叫做四舍六入五凑偶法
1、取指定位数的小数。
例如:
Math.Round(36.236,2)=36.24; Math.Round(36.232,2)=36.23
2、Math.Round ()在四舍五入时有个问题:
Math.Round(2.5,0) = 2; Math.Round(3.5,0) = 4;
2.5应该等于3才对!
Math.Round()准确的说,这个函数不是四舍五入,而是四舍六入五凑偶,就是说小于4或大于6的该舍该入是没有争议的,而5处在正中间,如果四舍五入则会造成数据的整体偏差,所以采取的原则是:如果舍入位为5,则舍入后最后一位为偶数,这是国际惯例。
由来:
对于0-9这10个数字来说,他们出现在某一位的几率是相等的。在金融结算中,如果单纯的使用四舍五入,那么,入参(5-9)会比舍参(0-4)多一个,也就是说,金融机构会亏本,考虑到这种情况,也为了舍入更加公平,出现了就近舍入。既然每一位出现0-9的几率相等,那么,该位是偶数还是奇数的几率也就相等,对于舍弃位,0-4舍,6-9进没有什么疑义,主要就在于对中间数5的处理。此时,决定5是否舍弃交由它的前一位决定,如果前一位是偶,则舍弃,如果前一位是奇,则进位,如此,就实现了大致公平的舍入处理。
按照银行家舍入,考虑11.5和-11.5, 对于11.5,5前边是奇数1,故进位,结果为12;对于-11.5,变成了-12。因此,该舍入应该叫做四舍六入五凑偶法
相关文章推荐
- C#里Math.Round()函数问题--5的處理
- C# Math.Round()函数问题
- C# Math.Round()函数问题
- C# Math.Round()函数问题
- C# Math.Round()函数问题
- C#里Math.Round()函数问题--5的處理
- C#里Math.Round()函数问题
- 【JAVA】Math.Round()函数常见问题“四舍5入”
- Math.Round函数四舍五入的问题
- Math.Round函数四舍五入的问题
- .Net中前台javascript与后台c#函数相互调用问题
- C# 中的四舍五入算法及 MSDN 2005 中文版 Math.Round 勘误
- c#中math各种函数对整值不同的处理方法及一些说明(优化分页的时候特别用到)
- C# Math.Round
- C# 调用 C++ dll 函数 时传递字符串 需要注意的问题
- 强大的C# Expression在一个函数求导问题中的简单运用
- C#中Math.Round()实现中国式四舍五入
- Math.ceil函数有点小问题
- Math.Round() -- c# 与java的区别
- Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解