1.BigDecimal类型转换
注意点:一定要用String类型转为BigDecimal来进行运算
BigDecimal a = new BigDecimal("0");
a.doubleValue()
a.toString()
double精度运算不准确,需要借助BigDecimal来运算,并且需要String类型转为BigDecimal,例子如下:
public static void main(String[] args) {
double a = 11.11;
double b = 22.22;
double c = 0.00;
BigDecimal a1 = new BigDecimal(a);
BigDecimal b1 = new BigDecimal(b);
BigDecimal c1 = new BigDecimal(c);
BigDecimal a2 = new BigDecimal(a+"");
BigDecimal b2 = new BigDecimal(b+"");
BigDecimal c2 = new BigDecimal(c+"");
System.out.println(a*b);
System.out.println(a1.multiply(b1));
System.out.println(a2.multiply(b2));
System.out.println(c1.multiply(a1.multiply(b1)));
System.out.println(c2.multiply(a2.multiply(b2)));
}
//打印结果如下
/*246.86419999999998
246.8641999999999747387846582569188381446435961153709932880406796584793482907116413116455078125
246.8642
0E-91
0.00000*/
2.BigDecimal相互比较大小
注意点:BigDecimal一定要用compareTo来比较大小
a.compareTo(b)
返回值 -1 小于 0 等于 1 大于
例子如下:
public static void main(String[] args) {
double a = 11.11;
double b = 22.22;
double c = 0.00;
double d = 11.11;
BigDecimal a1 = new BigDecimal(a+"");
BigDecimal b1 = new BigDecimal(b+"");
BigDecimal c1 = new BigDecimal(c+"");
BigDecimal d1 = new BigDecimal(d+"");
System.out.println(a1.compareTo(b1));
System.out.println(a1.compareTo(c1));
System.out.println(a1.compareTo(d1));
}
/*打印结果如下
-1
1
0*/
3.BigDecimal相互运算及设置精度
注意点:除法分母不能为0,并且一定要设置精度即保留几位小数
加:a.add(b)
减:a.subtract(b)
乘:a.multiply(b)
除:a.divide(b)
例子如下:乘法四舍五入保留两位小数,除法四舍五入保留2位小数
public static void main(String[] args) {
double a = 11.11;
double b = 22.23;
BigDecimal a1 = new BigDecimal(a+"");
BigDecimal b1 = new BigDecimal(b+"");
System.out.println(a1.add(b1));
System.out.println(a1.subtract(b1));
System.out.println(a1.multiply(b1));
System.out.println(a1.multiply(b1).setScale(2, BigDecimal.ROUND_HALF_UP));
System.out.println(a1.divide(b1, 2, BigDecimal.ROUND_HALF_UP));
}
/*打印结果如下
33.34
-11.12
246.9753
246.98
0.50*/
4.BigDecimal设置格式
DecimalFormat设置格式
System.out.println(amountFormat(new BigDecimal("123456789.1245"))); //123,456,789.12
private static String amountFormat(BigDecimal numberOfMoney){
//四舍五入并保留两位小数
BigDecimal bigDecimal = numberOfMoney.setScale(2, BigDecimal.ROUND_HALF_UP);
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00");
return decimalFormat.format(bigDecimal);
}