常用运算
public BigDecimal add(BigDecimal augend) | 加法 |
public BigDecimal subtract(BigDecimal subtrahend) | 减法 |
public BigDecimal multiply(BigDecimal multiplicand) | 乘法 |
public BigDecimal divide(BigDecimal divisor) | 除法 |
public BigDecimal abs() | 绝对值 |
另外类中有一些静态常量可以直接使用
public static final BigDecimal ZERO = zeroThroughTen[0];
public static final BigDecimal ONE = zeroThroughTen[1];
public static final BigDecimal TEN = zeroThroughTen[10];
注意事项
1、精度问题
System.out.println(new BigDecimal(0.09));
System.out.println(new BigDecimal(0.09d));
System.out.println(new BigDecimal(0.09f));
输出
0.0899999999999999966693309261245303787291049957275390625
0.0899999999999999966693309261245303787291049957275390625
0.0900000035762786865234375
这个解决方案是初始化时将参数设置为String型
System.out.println(new BigDecimal("0.09"));
输出 0.09
2、除法运算时出现无限循环小数如
System.out.println(BigDecimal.ONE.divide(new BigDecimal("3")));
会出现异常
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1690)
at com.tz.javac.Main.main(Main.java:15)
解决方案是运算时设置精度如
System.out.println(BigDecimal.ONE.divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_EVEN));
输出0.33
3、数值比较问题
BigDecimal z1 = new BigDecimal("0");
BigDecimal z2 = new BigDecimal("0.0");
System.out.println(BigDecimal.ZERO == z1);
System.out.println(BigDecimal.ZERO.equals(z1));
System.out.println(BigDecimal.ZERO == z2);
System.out.println(BigDecimal.ZERO.equals(z2));
System.out.println(BigDecimal.ZERO.compareTo(z1));
System.out.println(BigDecimal.ZERO.compareTo(z2));
输出
false
true
false
false
0
0
所以需要比较数值大小的时候请使用compareTo