BigDecimal
java.math.BigDecimal
为了解决java中浮点数运算不精确, 用这个类可以很好的解决
常用构造器
建议使用String类型构造方法, 否则使用double类型进行初始化可能还是不精确, 因为double本身就不够精确
构造器 | 说明 |
---|---|
BigDecimal(String val) | val必须是数字字符串才可以 |
BigDecimal(double val) | 可以传入double类型的数字进行精确运算 |
常用方法
返回值 | 方法 | 说明 |
---|---|---|
BigDecimal | add(BigDecimal bd) | 加法 |
BigDecimal | divide(BigDecimal bd) | 除法 如果出现除不尽的情况, 会抛出异常 |
BigDecimal | divide(BigDecimal bd, int scal, RoundingMode roundingMode) | 除法 bd表示进行运算的对象, scal保留几位小数, roundingMode是解决方案(例如四舍五入) 例如: bd3 = bd1.divide(bd2, 3, BigDecimal.ROUND_HALF_UP); 保留3位小数并四舍五入 |
BigDecimal | multiply(BigDecimal bd) | 乘法 |
BigDecimal | subtract(BigDecimal bd) | 减法 |
测试代码
// 这个类用来测试 浮点数运算
public class Test4_Double {
public static void main(String[] args) {
method();
}
public static void method() {
// 接收用户输入的两个小数
System.out.print("输入第一个小数: ");
double a = new Scanner(System.in).nextDouble();
System.out.print("输入第二个小数: ");
double b = new Scanner(System.in).nextDouble();
// 创建对象
BigDecimal bd1 = new BigDecimal(a + "");
BigDecimal bd2 = new BigDecimal(b + "");
// 做运算
BigDecimal bd3; // 定义bd3保存计算结果
bd3 = bd1.add(bd2);
System.out.println(bd3);
bd3 = bd1.subtract(bd2);
System.out.println(bd3);
bd3 = bd1.multiply(bd2);
System.out.println(bd3);
// bd3 = bd1.divide(bd2); // 除不尽. 抛出异常
// 保留3位小数并四舍五入
bd3 = bd1.divide(bd2, 3, BigDecimal.ROUND_HALF_UP);
System.out.println(bd3);
}
}