Java中BigDecimal类简介及用法说明(全网最全讲解)

乔欣 Java教程 发布时间:2022-12-02 10:49:55 阅读数:4857 1
下文可以好不夸张的说:"是整个互联网中"最全的BigDecimal类的教程

BigDecimal是什么呢?

我们都知道
在Java中对大数值的处理,可以采用java.math.BinInteger类和java.math.BigDecimal类,进行处理
然而BigInteger只能对整型进行处理,而BigDecimal可对整数和小数进行处理
可以说:"BigDecimal包含BigInteger"的功能
  所以我们熟知BigDecimal类的功能,则可以应付日常工作中的点点滴滴
另外 BigDecimal相对于float和Double的计算,其精度更高,
所以数学计算,金额计算,都必须使用BigDecimal类进行相关操作
下文笔者将详细讲述BigDecimal类的构造函数及其中常用的方法,如下所示

创建BigDecimal对象常用方法说明

BigDecimal BigDecimal(double d); 

//笔者推荐使用
BigDecimal BigDecimal(String s);
static BigDecimal valueOf(double d); 
例:

BigDecimal对象应用示例

public static void main(String[] args) {
	double d1 = 0.812323;
	double d2 = 77823.0;
	
	//禁止使用以下方法
	System.out.println("new BigDecimal("+d1+")=" + new BigDecimal(d1));
	System.out.println("new BigDecimal("+d2+")=" + new BigDecimal(d2));
	System.out.println("======================");
	
	System.out.println("new BigDecimal(String.valueOf("+d1+"))=" + new BigDecimal(String.valueOf(d1)));
	System.out.println("new BigDecimal(String.valueOf("+d2+"))=" + new BigDecimal(String.valueOf(d2)));
	System.out.println("======================");
	
	System.out.println("new BigDecimal(String.valueOf("+d1+"))=" + new BigDecimal(Double.toString(d1)));
	System.out.println("new BigDecimal(String.valueOf("+d2+"))=" + new BigDecimal(Double.toString(d2)));
	System.out.println("======================");
	
	System.out.println("BigDecimal.valueOf("+d1+")=" + BigDecimal.valueOf(d1));
	System.out.println("BigDecimal.valueOf("+d2+")=" + BigDecimal.valueOf(d2));
	System.out.println("===================");
 
	BigDecimal b1 = BigDecimal.valueOf(8);
	BigDecimal b2 = BigDecimal.valueOf(8.00000);
	System.out.println(b1.equals(b2));
	System.out.println(b1.compareTo(b2));
}

BigDecimal类valueOf()源码简介

public static BigDecimal valueOf(double val) {
	return new BigDecimal(Double.toString(val));
}
从以上的源码,我们可以得出
她的实质是调用new BigDecimal(Double)构造函数

BigDecimal类常用方法说明

/**
 * 求余数
 * 返回值为(this % divisor)BigDecimal
 */
BigDecimal remainder(BigDecimal divisor);
 
/**
 * 求相反数
 * 返回值是(-this)BigDecimal
 */
BigDecimal negate();
 
/**
 * 求比较
 * 返回:
 *   当此 BigDecimal 在数字上小于、等于或大于 val 时
 *    依次返回 -1、0 或 1
 */
int compareTo(BigDecimal val);

BigDecimal工具类

package com.util;
 
import java.math.BigDecimal;
/**
 * 提供精确的浮点数运算(包括加、减、乘、除、四舍五入)工具类
 */
public class ArithUtil {
 
	// 除法运算默认精度
	private static final int DEF_DIV_SCALE = 10;
 
	private ArithUtil() {
 
	}
 
	/**
	 * 精确加法
	 */
	public static double add(double value1, double value2) {
		BigDecimal b1 = BigDecimal.valueOf(value1);
		BigDecimal b2 = BigDecimal.valueOf(value2);
		return b1.add(b2).doubleValue();
	}
 
	/**
	 * 精确减法
	 */
	public static double sub(double value1, double value2) {
		BigDecimal b1 = BigDecimal.valueOf(value1);
		BigDecimal b2 = BigDecimal.valueOf(value2);
		return b1.subtract(b2).doubleValue();
	}
 
	/**
	 * 精确乘法
	 */
	public static double mul(double value1, double value2) {
		BigDecimal b1 = BigDecimal.valueOf(value1);
		BigDecimal b2 = BigDecimal.valueOf(value2);
		return b1.multiply(b2).doubleValue();
	}
 
	/**
	 * 精确除法 使用默认精度
	 */
	public static double div(double value1, double value2) throws IllegalAccessException {
		return div(value1, value2, DEF_DIV_SCALE);
	}
 
	/**
	 * 精确除法
	 * @param scale 精度
	 */
	public static double div(double value1, double value2, int scale) throws IllegalAccessException {
		if(scale < 0) {
			throw new IllegalAccessException("精确度不能小于0");
		}
		BigDecimal b1 = BigDecimal.valueOf(value1);
		BigDecimal b2 = BigDecimal.valueOf(value2);
		// return b1.divide(b2, scale).doubleValue();
		return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
 
	/**
	 * 四舍五入
	 * @param scale 小数点后保留几位
	 */
	public static double round(double v, int scale) throws IllegalAccessException {
		return div(v, 1, scale);
	}
	
	/**
	 * 比较大小
	 */
	public static boolean equalTo(BigDecimal b1, BigDecimal b2) {
		if(b1 == null || b2 == null) {
			return false;
		}
		return 0 == b1.compareTo(b2);
	}
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202212/4997.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者