BigDecimal主要是处理Java浮点数计算精度丢失的问题.
1. 方法介绍
加、减、乘法的方法类似,区别于方法名。
-加法:
BigDecimal add(BigDecimal augend)
BigDecimal add(BigDecimal augend, MathContext mc)
-减法:
BigDecimal subtract(BigDecimal subtrahend)
BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
-乘法:
BigDecimal multiply(BigDecimal multiplicand)
BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
注:关于MathContext , 这个参数主要用于设定舍入模式、以及精度.
-除法:
有6个方法,常用的为
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
2.使用方法注意事项
1).方法操作的参数都是BigDecimal类型
2).将其他类型的参数转为BigDecimal类型,BigDecimal(String val)
构造方法是首选。
public void test1(){
BigDecimal b1 = new BigDecimal(1.6);
BigDecimal b2 = new BigDecimal(1.5);
System.out.println(b1.add(b2));
}
执行结果:3.100000000000000088817841970012523233890533447265625
public void test2(){
BigDecimal b1 = new BigDecimal("1.6");
BigDecimal b2 = new BigDecimal("1.5");
System.out.println(b1.add(b2));
}
执行结果:3.1
3.使用示例
(1). 设置小数位数
public void test4(){
BigDecimal b1 = new BigDecimal("9.999");
BigDecimal b2 = new BigDecimal("10");
//不使用参数
System.out.println(b1.divide(b2));
}
输出:0.9999
public void test4(){
BigDecimal b1 = new BigDecimal("9.999");
BigDecimal b2 = new BigDecimal("10");
//保留3位小数
//四舍五入
System.out.println(b1.divide(b2,3,BigDecimal.ROUND_HALF_UP));
输出:1.000
}
(2). 设置返回总位数
public void test3(){
//总位数:从结果的最左边非零数字开始算起
//设置返回总位数为3
//四舍五入
MathContext mc = new MathContext(3, RoundingMode.HALF_UP); // 3 precision
BigDecimal b1 = new BigDecimal("9.999");
BigDecimal b2 = new BigDecimal("10");
System.out.println(b1.divide(b2, mc));
输出结果:1.00
}
BigDecimal用于解决Java浮点数计算精度问题,提供加、减、乘、除等方法,支持MathContext设定精度和舍入模式。使用时注意参数类型转换,通常通过构造方法转换为BigDecimal。
12万+

被折叠的 条评论
为什么被折叠?



