BigDecimal类
- 有关double,float精度问题
public class Demo {
public static void main(String[] args) {
double d1 = 1.0;
double d2 = 0.9;
System.out.println(d1 - d2);
double result = (1.4 - 0.5) / 0.9;
System.out.println(result);
}
}
结果:
应该为:0.1和1的,但结果不为0.1和1.因为其精度不够,有时候我们需要很高的精度,所以我们就需要使用BigDecimal这个类
-
有关BigDecimal类
用于要求精度够高时和大的浮点数精度计算
import java.math.BigDecimal; public class Test { public static void main(String[] args) { //double和float精度不够 //要求精度够高时使用BigDecimal,大的浮点数精确计算 BigDecimal bd1 = new BigDecimal("1.0");//尽量用字符串 BigDecimal bd2 = new BigDecimal("0.9"); //减法bd1.subtract(bd2);代表bd1-bd2 BigDecimal r1 = bd1.subtract(bd2); System.out.println(r1); //加法bd1.add(bd2);代表bd1+bd2 BigDecimal r2 = bd1.add(bd2); System.out.println(r2); //乘法bd1.multiply(bd2);代表bd1乘bd2 BigDecimal r3 = bd1.multiply(bd2); System.out.println(r3); //除法bd1.divide(bd2);代表bd1除以bd2 BigDecimal r4 = new BigDecimal("1.4") .subtract(new BigDecimal("0.9")) .divide(new BigDecimal("0.5")); System.out.println(r4); //除不尽的的情况 BigDecimal bd3 = new BigDecimal("10"); BigDecimal bd4 = new BigDecimal("3"); //BigDecimal r5 = bd3.divide(bd4); //这样写除不尽 会报异常 可以用divide的重载方法 BigDecimal r5 = bd3.divide(bd4, 2, BigDecimal.ROUND_HALF_UP); //第二个表示保留几位小数,ROUND_HALF_UP是数值为4的常量,表示四舍五入. System.out.println(r5); } }
System.out.println(r5); }
}