BigDecimal
位置:java.math包中。
作用:精确计算浮点数。
创建方式:BigDecimal bd=new BigDecimal(“1.0”);
产生背景:
public class TestBigDecimal {
public static void main(String[] args) {
double b1=1.0;
double b2=0.9;
System.out.println(b1-b2);
}
}
运行结果:0.09999999999999998
普通方法不能精确计算浮点数。
使用BigDecimal
实例:
import java.math.BigDecimal;
public class TestBigDecimal {
public static void main(String[] args) {
BigDecimal bg1=new BigDecimal("2.2");
BigDecimal bg2=new BigDecimal("1.2");
BigDecimal result1=bg1.add(bg2); //加法: bg1+bg2
System.out.println(result1);
BigDecimal result2=bg1.subtract(bg2); //减法:bg1-bg2
System.out.println(result2);
BigDecimal result3=bg1.divide(bg2,3,BigDecimal.ROUND_HALF_UP); // 除法:bg1/bg2 注意:加上保留几位小数
System.out.println(result3);
BigDecimal result4=bg1.multiply(bg2); //乘法:bg1*bg2
System.out.println(result4);
}
}
运行结果:
3.4
1.0
1.833
2.64
关于BigDecimal中除法的的注意事项
- 方法divide(BigDecimal bd, int scale, RoundingMode mode)
- 返回BigDecimal其值为(this /
divisor),其小数位数已指定。如果必须执行舍入操作以生成具有指定比例的结果,则将应用指定的舍入模式。
参数:
- divisor- BigDecimal将其除以的值。
- scale- BigDecimal要返回的商的比例。
- roundingMode -应用舍入模式。
返回值:
this / divisor
抛出:
ArithmeticException-如果divisor为零, roundingMode==ROUND_UNNECESSARY并且指定的小数位数不足以准确表示除法的结果。
IllegalArgumentException-如果roundingMode不代表有效的舍入模式。