BigDecimal

Posted zpkang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);	
	}
}

以上是关于BigDecimal的主要内容,如果未能解决你的问题,请参考以下文章

如何在java代码中使用elasticsearch painless BigDecimal?

BigDecimal 详解

BigDecimal

BigDecimal

在 Java 中使用 BigDecimal 手动 Math.pow

关于BigDecimal 的计算