一、前言
public class demo01 {
public static void main(String[] args) {
double d1 = 1.0;
double d2 = 0.9;
System.out.println(d1 - d2);
}
}
上述代码的结果为0.09999999999999998,出现这个结果是因为在java中"double"类型是浮点数,由于浮点数在计算机中的表示方法限制,某些十进制的小数在二进制中不能精确表示,因此会出现误差。例如,0.1或0.9,在二进制中需要无限的位数才能精确表示,但存储空间是有限的,因此会被截断,导致精度丢失。
因此需要精确小数运算的情况下,可以使用BigDecimal类。
二、BigDecimal类
"BigDecimal"类提供了对十进制浮点数的精确控制,但需要注意使用字符串或整数进行初始化,以避免浮点数的精度问题。
如下声明的bd1和bd2:
import java.math.BigDecimal;
public class demo01 {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
}
}
BigDecimal类的对象实现加减乘除运算:
import java.math.BigDecimal;
public class demo01 {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
//减法:subtract()方法
BigDecimal subtract = bd1.subtract(bd2);
System.out.println(subtract);
//加法:add()方法
BigDecimal add = bd1.add(bd2);
System.out.println(add);
//乘法:multiply()方法
BigDecimal multiply = bd1.multiply(bd2);
System.out.println(multiply);
//除法:divide()方法
BigDecimal a = new BigDecimal("1.4");
BigDecimal b = new BigDecimal("0.5");
BigDecimal c = new BigDecimal("0.9");
BigDecimal result = a.subtract(b).divide(c);
System.out.println(result);
//20除以3,保留小数点后两位,采用BigDecimal.ROUND_HALF_UP(四舍五入)
BigDecimal r = new BigDecimal("20").divide(new BigDecimal("3"), 2, BigDecimal.ROUND_HALF_UP);
System.out.println(r);
}
}
标签:BigDecimak,BigDecimal,05,System,println,new,public,out
From: https://www.cnblogs.com/wml201917205/p/18328472