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("小数点后第一位<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("小数点后第一位>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、小数点后第一位<5<br> 6、正数:Math.round(11.46)=11<br> 7、负数:Math.round(-11.46)=-11<br> 8、<br> 9、小数点后第一位>5<br> 10、正数:Math.round(11.68)=12<br> 11、负数:Math.round(-11.68)=-12<br><br> 根据上面例子的运行结果,我们还可以按照如下方式总结,或许更加容易记忆:<br><br> 1、参数的小数点后第一位<5,运算结果为参数整数部分。<br> 2、参数的小数点后第一位>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)就可以了。