Java BigDecimal基础用法详解
什么是BigDecimal
Java中的float和double类型是不能精确表示十进制数的,这对于很多需要精确计算的场景是不适用的。而BigDecimal是Java提供的一个可以精确表示任意大小和精度的十进制数类。
常用构造方法
-
BigDecimal(double val)
:通过一个Double类型的值来构造BigDecimal对象。由于double不能表示精确的十进制数,并且在转换过程中可能存在精度损失,因此可能会出现不完全精确的结果。 -
BigDecimal(String val)
:通过一个String类型的值来构造BigDecimal对象。String类型的表示方式可以精确地描述十进制数,因此可以获得完全精确的结果。
示例代码:
BigDecimal bd1 = new BigDecimal(2.01);
System.out.println(bd1); // 输出结果为2.010000000000000000708874089455323329925537109375
BigDecimal bd2 = new BigDecimal("2.01");
System.out.println(bd2); // 输出结果为2.01
常用操作方法
-
add(BigDecimal augend)
:将当前对象与augend相加。 -
subtract(BigDecimal subtrahend)
:将当前对象减去subtrahend。 -
multiply(BigDecimal multiplicand)
:将当前对象乘以multiplicand。 -
divide(BigDecimal divisor)
:将当前对象除以divisor。 -
compareTo(BigDecimal val)
:比较当前对象与val的大小。
示例代码:
BigDecimal bd1 = new BigDecimal("2.01");
BigDecimal bd2 = new BigDecimal("3.02");
BigDecimal bd3 = bd1.add(bd2);
System.out.println("2.01 + 3.02 = " + bd3); // 输出结果为5.03
BigDecimal bd4 = bd2.subtract(bd1);
System.out.println("3.02 - 2.01 = " + bd4); // 输出结果为1.01
BigDecimal bd5 = bd1.multiply(bd2);
System.out.println("2.01 * 3.02 = " + bd5); // 输出结果为6.0902
BigDecimal bd6 = bd2.divide(bd1);
System.out.println("3.02 / 2.01 = " + bd6); // 输出结果为1.5024875621890547
int result = bd1.compareTo(bd2);
if (result < 0) {
System.out.println("2.01 < 3.02");
} else if (result > 0) {
System.out.println("2.01 > 3.02");
} else {
System.out.println("2.01 = 3.02");
}
常用取整方法
-
setScale(int newScale, int roundingMode)
:将当前对象的小数位数设置为newScale。 -
intValue()
:将当前对象转换成int类型的值,并截断小数部分。 -
longValue()
:将当前对象转换成long类型的值,并截断小数部分。 -
doubleValue()
:将当前对象转换成double类型的值,可能会存在精度损失。 -
toPlainString()
:将当前对象转换成String类型的值,精度完整。
示例代码:
BigDecimal bd1 = new BigDecimal("3.1415926");
BigDecimal bd2 = bd1.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("3.1415926取两位小数后为:" + bd2); // 输出结果为3.14
System.out.println(bd2.intValue()); // 输出结果为3
System.out.println(bd2.longValue()); // 输出结果为3
System.out.println(bd2.doubleValue()); // 输出结果为3.14
System.out.println(bd2.toPlainString()); // 输出结果为3.14
总结
在进行数值计算时,如果数据要求精度比较高,不能使用float、double类型,可以选择使用BigDecimal类型进行处理。我们可以通过BigDecimal对象提供的一系列方法,实现数值计算、比较、取整等功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java BigDecimal基础用法详解 - Python技术站