在编程中,当我们需要得到精确的运算结果的时候,+,-,*,/ 已经不能满足我们的需求,比如:
1 | System.out.println(0.1+0.2); //0.30000000000000004 |
简单的运算结果却不符合我们的预期。
Java提供了一个叫BigDecimal的类,该类支持任何精度的定点数,可以用它来精确计算货币值。
java.math.BigDecimal类共有四个构造方法:
1.BigDecimal(int) —-int类型转为BigDecimal类型
2.BigDecimal(double) —-double类型转为BigDecimal类型
3.BigDecimal(long) —-long类型转为BigDecimal类型
4.BigDecimal(string) —-string类型转为BigDecimal类型
实际使用中,一般使用BigDecimal(string)构造方法。因为将string类型转为BigDecimal的结果是可预知的。
相反,如通过构造方法BigDecimal(0.1) 将0.1转为BigDecimal类型:
1 | System.out.println(new BigDecimal(0.1)); //0.1000000000000000055511151... |
因为0.1并不能精确的表示为double
而通过BigDecimal(string)我们可以得到预期的转换结果:
1 | System.out.println(new BigDecimal("0.1")); //0.1 |
常用方法:
1.加法:
1 | BigDecimal add=new BigDecimal("0.1").add(new BigDecimal("0.2")); |
2.减法:
1 | BigDecimal sub=new BigDecimal("0.3").subtract(new BigDecimal("0.1")); |
3.乘法:
1 | BigDecimal mul=new BigDecimal("0.1").multiply(new BigDecimal("0.2")); |
4.除法:
1 | BigDecimal div=new BigDecimal("1.2").divide(new BigDecimal("3")); |
5.比较大小:
1 | //小于,返回-1 |