- 很多实际应用中需要精确运算,而double是近似值存储,不符合要求,这时需要使用BigDecimal
- 位置:java.math包中
- 作用:精确计算浮点数
- 创建方式:BigDecimal bd=new BigDecimal(“1.0”)
- 方法:
- BigDecimal add(BigDecimal bd) //加
- subtract() //减
- multiply() //乘
- divide() //除
参数scal: 精确到小数点后几位
参数mode:指定小数部分的取舍模式,通常采用四舍五入,取值为BigDecimal.ROUND_HALF_UP
package com.usuallyclass.bigdecimal;
import java.math.BigDecimal;
public class Demo01 {
public static void main(String[] args) {
double d1=1.0;
double d2=0.9;
System.out.println(d1-d2);//不是0.1
//面试题
double result=(1.4-0.5)/0.9;
System.out.println(result);//不是1 原因:double存储的是近似的值,如1.0可能存的是0.999,经过各种运算,就会有误差
//BigDecimal:浮点数精确计算
BigDecimal bd1 = new BigDecimal("1.0");//应当存入字符串这样才无误差,如存入浮点数依然可能会有误差
BigDecimal bd2 = new BigDecimal("0.9");
//减法
BigDecimal r1 =bd1.subtract(bd2);
System.out.println(r1);
//加法
BigDecimal r2 =bd1.add(bd2);
System.out.println(r2);
//乘法
BigDecimal r3 =bd1.multiply(bd2);
System.out.println(r3);
//除法
BigDecimal r4=new BigDecimal("1.4")
.subtract(new BigDecimal("0.5"))
.divide(new BigDecimal("0.9"));
System.out.println(r4);
BigDecimal r5 =new BigDecimal("10").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);//会报错,当无法整除的时候
//scale:保留几位小数 再后面选BigDecimal.ROUND_HALF_UP
System.out.println(r5);//
}
}



