BigDecimal关键字
BigDecimal是Java在java.math包下面提供的一个关键字,可以用于用于浮点数的计算,因为在一般情况下,使用单精度浮点float或者双精度浮点double,可能会造成精度缺失
Float造成精度缺失
public class FloatDemo {
public static void main(String[] args) {
float z = 0.3f * 3;
System.out.println(z);
}
}
其输出结果为:
double造成精度缺失
public class DoubleDemo {
public static void main(String[] args) {
double number1 = 10;
double number2 = 20.2;
double number3 = 300.03;
double result = number1 + number2 + number3;
System.out.println(result);
}
}
结果为:
BigDecimal使用
BigDecimal提供的方法
BigDecimal(int) 创建一个具有参数所指定整数值的对象
BigDecimal(double) 创建一个具有参数所指定双精度值的对象
BigDecimal(long) 创建一个具有参数所指定长整数值的对象
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象
加减乘除的方法
add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象
subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象
multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象
divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象
BigDecimal保留小数点后几位数字
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal bd = new BigDecimal("1.23456789");
bd = bd.setScale(2, RoundingMode.HALF_UP);
System.out.println(bd);
}
}
使用BigDecimal保留小数点后2位数字,其有四舍五入
备注: RoundingMode提供了多种四舍五入的方法
(1)ROUND_UP
(2)ROUND_DOWN
(3)
BigDecimal保留精度
public class BigDecimal2Demo {
public static void main(String[] args) {
BigDecimal bd = new BigDecimal("1.23456789");
BigDecimal bd1 = new BigDecimal("1.23456789");
BigDecimal bigDecimal = bd.add(bd1);
System.out.println(bigDecimal);
}
}
使用字符串的形式构造BigDecimal
BigDecimal精度缺失
BigDecimal也会造成精度缺失,如
public class BigDecimal3Demo {
public static void main(String[] args) {
BigDecimal bigDecimal = new BigDecimal(1.23456789);
System.out.println(bigDecimal);
}
}
输出结果为:
所以不推荐使用double等构造,推荐使用字符串构造BigDecimal
BigDecimal比较
BigDecimal比较比较实用compareTo方法,如
public class BigDecimal1Demo {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("1.00");
System.out.println(bd1.compareTo(bd2));
}
}
输出结果为:
不推荐使用equals比较,因为不准,如
public class BigDecimal1Demo {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("1.00");
System.out.println(bd1.compareTo(bd2));
System.out.println(bd1.equals(bd2));
}
}
输出结果为:
总结
总之,BigDecimal可以用于浮点数的计算,防止精度缺失,但是使用的时候也要注意使用String构造