(转)Math.Round() -- c# 与 java的区别
来源:互联网 发布:燕山大学网络教学平台 编辑:程序博客网 时间:2024/05/01 10:38
http://hi.baidu.com/yk±±¼«ÐÇ/blog/item/7b949acc2690595a0fb345f0.html
明明知道,java与c#在很多方面都有很多不同,但是如果让详细描述,却不一定能说出来多少。
前段时间碰见一个问题,才恍然大悟般的,明白了一条不同。
有同事的同学笔试,有道题目是 Math.Round(11.5) 与Math.Round(-11.5)的值。
一个同事是java的,直接答道,不就是12和-11么。
另外一个同事是搞.Net的,写了个程序,结果是12和-12。
咦?结果怎么不一样?
分别查了java帮助文档和MSDN帮助文档,才发现,原来,是标准不同引起的。
java的Round,是+0.5取整,所以,结果当然是12和-11了。
而.net的不同,而且描述也负责的多。在它的备注里,有这么一条说明:
此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或银行家舍入。
哦,到此为止,终于明白了,为什么会不同。但是,什么又是银行家舍入呢?
找了半天,才找到解释说明:
对于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。因此,该舍入应该叫做四舍六入五向偶法。
原来如此。
明明知道,java与c#在很多方面都有很多不同,但是如果让详细描述,却不一定能说出来多少。
前段时间碰见一个问题,才恍然大悟般的,明白了一条不同。
有同事的同学笔试,有道题目是 Math.Round(11.5) 与Math.Round(-11.5)的值。
一个同事是java的,直接答道,不就是12和-11么。
另外一个同事是搞.Net的,写了个程序,结果是12和-12。
咦?结果怎么不一样?
分别查了java帮助文档和MSDN帮助文档,才发现,原来,是标准不同引起的。
java的Round,是+0.5取整,所以,结果当然是12和-11了。
而.net的不同,而且描述也负责的多。在它的备注里,有这么一条说明:
此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或银行家舍入。
哦,到此为止,终于明白了,为什么会不同。但是,什么又是银行家舍入呢?
找了半天,才找到解释说明:
对于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。因此,该舍入应该叫做四舍六入五向偶法。
原来如此。
- Math.Round -- c# 与 java的区别
- Math.Round() -- c# 与 java的区别
- (转)Math.Round() -- c# 与 java的区别
- (转)Math.Round() -- c# 与 java的区别
- JAVA 中Math.ceil()、Math.floor()和Math.round()的区别
- math.random()和Math.round的区别
- java 中 Math.round() Math.ceil() Math.floor()区别
- java.lang.math与Java.Math的区别
- Java Math类中的floor ceil round的区别
- java中Math.floor,ceil,round的区别
- Math.round(),Math.ceil(),Math.floor()的区别
- [转]Math中floor,round和ceil的区别
- Math.round|Math.floor|Math.ceil区别
- java中Math.random()与java.util.random()的区别
- java中Math.random()与java.util.random()的区别
- Java中Math类Math.floor()、Math.round()及Math.ceil()等方法的使用
- java Math.round()比较特殊的四舍五入
- Java Math的floor,round,ceil使用方法
- EXTJS学习2
- 惊闻广州政协做调查为广州电视台取消粤语节目做准备
- 让我们一起云估算吧
- (转)ORA-01502 state unusable錯誤成因和解決方法
- apache 的mod-status
- (转)Math.Round() -- c# 与 java的区别
- 软件质量管理实践小结
- HTMLPARSER学习小结
- 6个PHP安全扫描工具
- 需求规格说明书评审模版
- 高性能站点一书学习心得1
- nmon学习
- javascript中屏蔽esc键
- (转)ScheduledExecutorService接口