BigDecimal

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);	
	}
}
原文地址:https://www.cnblogs.com/zpKang/p/12901555.html