Java在计算浮点数的时候,因为二进制没法精确表示0.1的值(就比如十进制没法精确表示1/3同样),因此通常会对小数格式化处理.html
可是若是涉及到金钱的项目,一点点偏差都不能有,必须使用精确运算的时候,就能够使用BigDecimal方法计算.java
可是在使用中还须要注意一个问题:api
//直接使用double类型数据进行运算 System.out.println(0.05+0.01); //使用BigDecimal的double参数的构造器 BigDecimal bd1 = new BigDecimal(0.05); BigDecimal bd2 = new BigDecimal(0.01); System.out.println(bd1.add(bd2)); //使用BigDecimal的String参数的构造器 BigDecimal bd3 = new BigDecimal("0.05"); BigDecimal bd4 = new BigDecimal("0.01"); System.out.println(bd3.add(bd4));
这三个输出结果是不同的:ide
因此在计算的时候,应该先把数字转换成String类型的,才能获得最精确的值.post
附经常使用的方法:spa
add 加code
subtract 减htm
multiply 乘blog
divide 除ip
abs 绝对值
getScale 根据一个规则取几位小数
pow 几回方
中文API连接:
http://www.apihome.cn/api/java/BigDecimal.html