bigdecimal工具类
时间: 2023-10-24 20:34:00 浏览: 127
BigDecimal工具类是Java中用于进行高精度计算的类,它可以解决浮点数计算中的精度问题。常用的BigDecimal工具类有:
- java.math.BigDecimal:基本的加、减、乘、除等运算方法。
- Apache Commons Math库中的BigDecimal类:提供了丰富的数学运算方法,如四舍五入、设置精度等。
- 阿里巴巴的fastjson库中的BigDecimal类:提供了JSON序列化和反序列化时对BigDecimal类型的支持。
- Hutool库中的BigDecimal类:提供了更多的数学运算方法,以及与其他类型转换的工具方法。12
相关问题
Java BigDecimal 工具类
Java中的BigDecimal类提供了精确的十进制运算,可以避免浮点数运算精度丢失的问题。以下是一个简单的BigDecimal 工具类的示例,可以方便地进行加、减、乘、除、取反、取绝对值、比较大小等操作:
import java.math.BigDecimal;
public class BigDecimalUtil {
private static final int DEFAULT_SCALE = 2; //默认保留小数点后2位
public static BigDecimal add(BigDecimal v1, BigDecimal v2) {
return v1.add(v2);
}
public static BigDecimal subtract(BigDecimal v1, BigDecimal v2) {
return v1.subtract(v2);
}
public static BigDecimal multiply(BigDecimal v1, BigDecimal v2) {
return v1.multiply(v2);
}
public static BigDecimal divide(BigDecimal v1, BigDecimal v2) {
return v1.divide(v2, DEFAULT_SCALE, BigDecimal.ROUND_HALF_UP);
}
public static BigDecimal negate(BigDecimal v) {
return v.negate();
}
public static BigDecimal abs(BigDecimal v) {
return v.abs();
}
public static int compare(BigDecimal v1, BigDecimal v2) {
return v1.compareTo(v2);
}
public static boolean equals(BigDecimal v1, BigDecimal v2) {
return v1.compareTo(v2) == 0;
}
public static boolean greaterThan(BigDecimal v1, BigDecimal v2) {
return v1.compareTo(v2) > 0;
}
public static boolean lessThan(BigDecimal v1, BigDecimal v2) {
return v1.compareTo(v2) < 0;
}
}
使用示例:
BigDecimal v1 = new BigDecimal("100.12");
BigDecimal v2 = new BigDecimal("80.88");
BigDecimal result = BigDecimalUtil.add(v1, v2); // 181.00
result = BigDecimalUtil.subtract(v1, v2); // 19.24
result = BigDecimalUtil.multiply(v1, v2); // 8109.6256
result = BigDecimalUtil.divide(v1, v2); // 1.24
result = BigDecimalUtil.negate(v1); // -100.12
result = BigDecimalUtil.abs(new BigDecimal("-100.12")); //100.12
int compareResult = BigDecimalUtil.compare(v1, v2); //1
boolean equalResult = BigDecimalUtil.equals(v1, v2); //false
boolean greaterThanResult = BigDecimalUtil.greaterThan(v1, v2); //true
boolean lessThanResult = BigDecimalUtil.lessThan(v1, v2); //false
hutool BigDecimal 工具类
Hutool 中 BigDecimal 工具类的使用
数字操作工具 NumberUtil
NumberUtil
是 Hutool 提供的一个用于处理各种数值类型的实用工具类。对于 BigDecimal
类型的操作,该工具提供了多种便捷的方法来简化开发过程。
- 加法运算
通过调用 NumberUtil.add(BigDecimal... numbers)
方法可以实现多个 BigDecimal
对象之间的相加操作[^1]:
import cn.hutool.core.util.NumberUtil;
public class Main {
public static void main(String[] args) {
java.math.BigDecimal bigDecimal1 = java.math.BigDecimal.valueOf(1.23);
java.math.BigDecimal bigDecimal2 = java.math.BigDecimal.valueOf(1.22);
// 使用 NumberUtil 进行两个 BigDecimal 的加法计算
java.math.BigDecimal resultAddition = NumberUtil.add(bigDecimal1, bigDecimal2);
System.out.println(resultAddition); // 输出:2.45
}
}
- 减法运算
同样地,如果需要执行减法,则可利用 NumberUtil.sub(Number minuend, Number subtrahend)
函数完成此功能:
// 计算 bigDecimal1 - bigDecimal2
java.math.BigDecimal resultSubtraction = NumberUtil.sub(bigDecimal1, bigDecimal2);
System.out.println(resultSubtraction); // 输出:0.01
- 乘法运算
当涉及到乘法规则时,可以选择 NumberUtil.mul(Number multiplicand, Number multiplier)
来获取精确的结果:
// 执行 bigDecimal1 * bigDecimal2
java.math.BigDecimal resultMultiplication = NumberUtil.mul(bigDecimal1, bigDecimal2);
System.out.println(resultMultiplication); // 输出:1.5006
- 除法运算
最后,在处理除法的情况下,应该采用 NumberUtil.div(Number dividend, Number divisor, int scale)
并指定精度范围以防止出现无限循环小数的情况:
// 完成 bigDecimal1 / bigDecimal2,并设置保留两位小数
java.math.BigDecimal resultDivision = NumberUtil.div(bigDecimal1, bigDecimal2, 2);
System.out.println(resultDivision); // 输出:1.01
以上就是基于 Hutool 库中的 NumberUtil
实现基本四则运算的例子。这些函数不仅限于 BigDecimal
数据类型;实际上它们支持所有的 Java 基本数据类型及其对应的封装对象作为参数输入。
阅读全文
相关推荐













