BigDecimal
类是 Java 中用来进行高精度定点数算术运算的主要类,它位于 java.math
包中。这个类设计用于需要精确小数点运算的场景,比如财务计算,以避免浮点数运算中的舍入误差
-
构造方法:
BigDecimal(String val)
:使用字符串表示的数值创建一个BigDecimal
实例,这是推荐的构造方法,因为它可以精确地表示其值。BigDecimal(double val)
:虽然存在这个构造方法,但不建议使用,因为它可能会引入舍入误差。
-
基本算术运算:
add(BigDecimal augend)
:加法。subtract(BigDecimal subtrahend)
:减法。multiply(BigDecimal multiplicand)
:乘法。divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
:除法,其中scale
指定结果的小数位数,roundingMode
指定舍入模式。
-
比较和测试方法:
compareTo(BigDecimal val)
:比较两个BigDecimal
的大小,返回值说明了调用对象与参数的相对大小(正数、零、负数分别代表大于、等于、小于)。equals(Object x)
和hashCode()
:用于比较BigDecimal
对象是否相等以及在集合中使用。
-
舍入和精度处理:
setScale(int newScale, RoundingMode roundingMode)
:设置BigDecimal
的小数位数并按指定的舍入模式进行四舍五入。round(RoundingMode roundingMode)
:按照指定的舍入规则对BigDecimal
进行舍入。
-
其他常用方法:
abs()
:返回该BigDecimal
值的绝对值。negate()
:返回该BigDecimal
值的相反数。pow(int n)
:返回this
值的 n 次幂。stripTrailingZeros()
:去掉尾部多余的零。toPlainString()
:转换为字符串,不使用科学计数法表示。
-
静态方法:
BigDecimal.ZERO
,BigDecimal.ONE
,BigDecimal.TEN
等:提供了常量实例,方便使用。valueOf(long val)
或valueOf(double val)
:静态工厂方法,推荐使用于 long 或 double 转换为BigDecimal
,比直接使用构造函数更优。
// 创建两个BigDecimal对象,建议使用字符串构造,以避免直接使用double可能导致的精度问题
BigDecimal number1 = new BigDecimal("234.567");
BigDecimal number2 = new BigDecimal("123.456");
// 进行加法运算
BigDecimal sum = number1.add(number2);
// 打印结果
System.out.println("和为: " + sum);
// 如果需要设定精度和舍入模式进行运算,可以这样做:
MathContext mc = new MathContext(4, RoundingMode.HALF_UP); // 保留4位小数,四舍五入
BigDecimal roundedSum = number1.add(number2, mc);
System.out.println("设定精度和舍入模式进行运算结果: " + roundedSum);
}