一、BigDecimal绝对值方法
public BigDecimal abs() { return (signum() >= 0 ? this : this.negate()); }
BigDecimal类中提供了abs()方法,用于返回BigDecimal对象的绝对值。如果当前对象大于等于0,则返回当前对象;否则返回当前对象的相反数。
当我们需要对数据进行数值比较时,绝对值方法可以很好的处理正负数问题。例如:
BigDecimal num1 = new BigDecimal("-123.45"); BigDecimal num2 = new BigDecimal("543.21"); BigDecimal diff = num1.subtract(num2).abs(); System.out.println(diff); // 输出结果:666.66
在上述代码中,我们创建了两个BigDecimal对象num1和num2,其中num1为负数,num2为正数。通过subtract()方法计算差值,再使用abs()方法求绝对值,得到diff为666.66。
二、BigDecimal绝对值比较
在比较两个BigDecimal对象大小时,可以使用compareTo()方法,该方法返回一个int值表示两个对象的大小关系。返回值为0表示相等,为正数表示大于,为负数表示小于。
例如,我们有如下代码:
BigDecimal num1 = new BigDecimal("-123.45"); BigDecimal num2 = new BigDecimal("543.21"); System.out.println(num1.compareTo(num2)); // 输出结果:-1 System.out.println(num2.compareTo(num1)); // 输出结果:1
通过compareTo()方法比较num1和num2的大小,可以看到num1小于num2,输出结果为-1,num2大于num1,输出结果为1。
有时候,我们需要比较两个BigDecimal对象的绝对值大小,可以借助abs()方法和compareTo()方法实现。例如:
BigDecimal num1 = new BigDecimal("-123.45"); BigDecimal num2 = new BigDecimal("543.21"); int result = num1.abs().compareTo(num2.abs()); System.out.println(result); // 输出结果:-1
在上述代码中,我们先使用abs()方法获取num1和num2的绝对值,然后再使用compareTo()方法比较大小,得到结果为-1,表示num1绝对值小于num2绝对值。
三、BigDecimal除法
除法是数学中最基本的运算之一,在BigDecimal类中也提供了dived()和divideToIntegralValue()方法用于实现除法运算,这两个方法的返回值均为BigDecimal类型。
dived()方法用于进行基本的除法运算,例如:
BigDecimal num1 = new BigDecimal("123.456"); BigDecimal num2 = new BigDecimal("0.01"); BigDecimal result = num1.divide(num2); System.out.println(result); // 输出结果:12345.60
在上述代码中,num1除以num2得到结果为12345.60,可以看到精确到小数点后两位。
除了基本的除法运算,BigDecimal还提供了divideToIntegralValue()方法,用于进行整数除法运算并返回商的整数部分。
BigDecimal num1 = new BigDecimal("123.456"); BigDecimal num2 = new BigDecimal("0.01"); BigDecimal result = num1.divideToIntegralValue(num2); System.out.println(result); // 输出结果:12345
在上述代码中,num1除以num2得到结果为12345,可以看到结果为商的整数部分,没有小数位。
四、BigDecimal赋值
在BigDecimal类中,可以通过valueOf()方法将其他数据类型转换为BigDecimal类型。
int num = 123; BigDecimal bigDecimal = BigDecimal.valueOf(num); System.out.println(bigDecimal); // 输出结果:123
在上述代码中,我们将int类型的变量num转换为BigDecimal类型的变量bigDecimal,并输出bigDecimal的值。
五、BigDecimal取绝对值
在上面的第一部分中我们已经提到了BigDecimal类中的abs()方法,用于返回BigDecimal对象的绝对值。
六、BigDecimal范围
在创建BigDecimal对象时,可以通过传入一个MathContext对象来指定对象的精度和舍入规则。例如:
BigDecimal num = new BigDecimal("123.456789", new MathContext(4, RoundingMode.HALF_UP)); System.out.println(num); // 输出结果:123.5
在上述代码中,我们指定精度为4位,舍入规则为四舍五入,创建了一个值为123.456789的BigDecimal对象num。由于精度为4位,因此小数点后超过4位的数值被舍去了,输出结果为123.5。
七、BigDecimal比较金额大小
在企业开发中,比较金额的大小是非常常见的操作。在前面的第二部分中我们已经提到了如何比较BigDecimal对象的大小,但是在比较金额时还需要注意精度问题。
例如,我们有如下代码:
BigDecimal num1 = new BigDecimal("123.45"); BigDecimal num2 = new BigDecimal("123.449"); System.out.println(num1.compareTo(num2)); // 输出结果:1
通过compareTo()方法,可以看到num1大于num2,输出结果为1。但是,如果我们需要比较它们的金额大小呢?可以借助setScale()方法来实现精度的控制。
BigDecimal num1 = new BigDecimal("123.45"); BigDecimal num2 = new BigDecimal("123.449"); BigDecimal result = num1.setScale(2, RoundingMode.HALF_UP) .compareTo(num2.setScale(2, RoundingMode.HALF_UP)); System.out.println(result); // 输出结果:0
在上述代码中,我们使用setScale()方法将num1和num2的小数点后保留两位,舍入规则为四舍五入,并使用compareTo()方法比较大小,得到结果为0,表示num1与num2金额相等。
八、BigDecimal取相反数
在BigDecimal类中,可以通过negate()方法获取当前对象的相反数。
BigDecimal num = new BigDecimal("123.45"); BigDecimal result = num.negate(); System.out.println(result); // 输出结果:-123.45
在上述代码中,我们创建了一个BigDecimal对象num,并通过negate()方法获取其相反数,得到结果为-123.45。
九、BigDecimal判断等于0
在BigDecimal类中,可以使用compareTo()方法将BigDecimal对象和BigDecimal.ZERO进行比较,判断是否等于0。
BigDecimal num = new BigDecimal("0"); if(num.compareTo(BigDecimal.ZERO) == 0) { System.out.println("num等于0"); }
在上述代码中,我们首先将num设置为0,再使用compareTo()方法和BigDecimal.ZERO进行比较,得到结果为0,表示num等于0。