java Math.round()比较特殊的四舍五入

public class MathTest {<wbr><wbr><br><wbr><wbr> public static void main(String[] args) {<wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr>System.out.println("小数点后第一位=5");<wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr>System.out.println("正数:Math.round(11.5)=" + Math.round(11.5));<wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr>System.out.println("负数:Math.round(-11.5)=" + Math.round(-11.5));<wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr>System.out.println();<wbr><wbr><br><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr>System.out.println("小数点后第一位&lt;5");<wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr>System.out.println("正数:Math.round(11.46)=" + Math.round(11.46));<wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr>System.out.println("负数:Math.round(-11.46)=" + Math.round(-11.46));<wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr>System.out.println();<wbr><wbr><br><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr>System.out.println("小数点后第一位&gt;5");<wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr>System.out.println("正数:Math.round(11.68)=" + Math.round(11.68));<wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr>System.out.println("负数:Math.round(-11.68)=" + Math.round(-11.68));<wbr><wbr><br><wbr><wbr> }<wbr><wbr><br> }<wbr><wbr><br><br> 运行结果:<br><br> 1、小数点后第一位=5<br> 2、正数:Math.round(11.5)=12<br> 3、负数:Math.round(-11.5)=-11<br> 4、<br> 5、小数点后第一位&lt;5<br> 6、正数:Math.round(11.46)=11<br> 7、负数:Math.round(-11.46)=-11<br> 8、<br> 9、小数点后第一位&gt;5<br> 10、正数:Math.round(11.68)=12<br> 11、负数:Math.round(-11.68)=-12<br><br> 根据上面例子的运行结果,我们还可以按照如下方式总结,或许更加容易记忆:<br><br> 1、参数的小数点后第一位&lt;5,运算结果为参数整数部分。<br> 2、参数的小数点后第一位&gt;5,运算结果为参数整数部分绝对值+1,符号(即正负)不变。<br> 3、参数的小数点后第一位=5,正数运算结果为整数部分+1,负数运算结果为整数部分。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

终结:大于五全部加,等于五正数加,小于五全不加。

还有一个问题就是奇进偶舍的原则

今天客户跑过来跟我说,我们程序里面计算的价格不对,我检查了一下,发现价格是经过折算后的价格,结果是可能小数位较多,而单据上只能打印两位价格,所以就对价格调用Math.Round(price,2)函数进行四舍五入。

而出现问题的单价就是1.805,函数Math.Round(1.805,2)的返回值却是1.80,按照四舍五入的原则,结果应该是1.81才对。

在一番google之后,发现微软是对了,是我们错了。:(

原来四舍五入也有个国际惯例,叫奇进偶舍,意思是当舍入位前面一位是奇数时,就进,为偶数时,就舍,这也是体现公平性的原理。

可是国际惯例往往在国内很多企业行不通,为了应付他们的要求,采用Math.Round(price,2,MidpointRounding.AwayFromZero)就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值