您的位置:首页 > 编程语言 > Java开发

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

2014-07-02 15:57 274 查看
java Math.round()比较特殊的四舍五入

public class MathTest {

public static void main(String[] args) {

System.out.println("小数点后第一位=5");

System.out.println("正数:Math.round(11.5)=" + Math.round(11.5));

System.out.println("负数:Math.round(-11.5)=" + Math.round(-11.5));

System.out.println();

System.out.println("小数点后第一位<5");

System.out.println("正数:Math.round(11.46)=" + Math.round(11.46));

System.out.println("负数:Math.round(-11.46)=" + Math.round(-11.46));

System.out.println();

System.out.println("小数点后第一位>5");

System.out.println("正数:Math.round(11.68)=" + Math.round(11.68));

System.out.println("负数:Math.round(-11.68)=" + Math.round(-11.68));

}

}

运行结果:

1、小数点后第一位=5

2、正数:Math.round(11.5)=12

3、负数:Math.round(-11.5)=-11

4、

5、小数点后第一位<5

6、正数:Math.round(11.46)=11

7、负数:Math.round(-11.46)=-11

8、

9、小数点后第一位>5

10、正数:Math.round(11.68)=12

11、负数:Math.round(-11.68)=-12

根据上面例子的运行结果,我们还可以按照如下方式总结,或许更加容易记忆:

1、参数的小数点后第一位<5,运算结果为参数整数部分。

2、参数的小数点后第一位>5,运算结果为参数整数部分绝对值+1,符号(即正负)不变。

3、参数的小数点后第一位=5,正数运算结果为整数部分+1,负数运算结果为整数部分。

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

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

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

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

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

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

可是国际惯例往往在国内很多企业行不通,为了应付他们的要求,采用Math.Round(price,2,MidpointRounding.AwayFromZero)就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: