bigdecimal工具类
时间: 2023-10-24 19:34:00 浏览: 142
BigDecimal工具类是Java中用于进行高精度计算的类,它可以解决浮点数计算中的精度问题。常用的BigDecimal工具类有:
1. java.math.BigDecimal:基本的加、减、乘、除等运算方法。
2. Apache Commons Math库中的BigDecimal类:提供了丰富的数学运算方法,如四舍五入、设置精度等。
3. 阿里巴巴的fastjson库中的BigDecimal类:提供了JSON序列化和反序列化时对BigDecimal类型的支持。
4. Hutool库中的BigDecimal类:提供了更多的数学运算方法,以及与其他类型转换的工具方法。<span class="em">1</span><span class="em">2</span>
相关问题
Java BigDecimal 工具类
Java中的BigDecimal类提供了精确的十进制运算,可以避免浮点数运算精度丢失的问题。以下是一个简单的BigDecimal 工具类的示例,可以方便地进行加、减、乘、除、取反、取绝对值、比较大小等操作:
```java
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;
}
}
```
使用示例:
```java
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]:
```java
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)` 函数完成此功能:
```java
// 计算 bigDecimal1 - bigDecimal2
java.math.BigDecimal resultSubtraction = NumberUtil.sub(bigDecimal1, bigDecimal2);
System.out.println(resultSubtraction); // 输出:0.01
```
- **乘法运算**
当涉及到乘法规则时,可以选择 `NumberUtil.mul(Number multiplicand, Number multiplier)` 来获取精确的结果:
```java
// 执行 bigDecimal1 * bigDecimal2
java.math.BigDecimal resultMultiplication = NumberUtil.mul(bigDecimal1, bigDecimal2);
System.out.println(resultMultiplication); // 输出:1.5006
```
- **除法运算**
最后,在处理除法的情况下,应该采用 `NumberUtil.div(Number dividend, Number divisor, int scale)` 并指定精度范围以防止出现无限循环小数的情况:
```java
// 完成 bigDecimal1 / bigDecimal2,并设置保留两位小数
java.math.BigDecimal resultDivision = NumberUtil.div(bigDecimal1, bigDecimal2, 2);
System.out.println(resultDivision); // 输出:1.01
```
以上就是基于 Hutool 库中的 `NumberUtil` 实现基本四则运算的例子。这些函数不仅限于 `BigDecimal` 数据类型;实际上它们支持所有的 Java 基本数据类型及其对应的封装对象作为参数输入。
阅读全文
相关推荐













