用来计算数据量大的类&能精确控制小数的类----BigDecimal

首先先来了解一下BigDecimal类的继承关系:
1.它属于java.math包。

2.继承关系:

 java.lang.Object

   |--java.lang.Number

       |-- java.math.BigDecimal

3.所有已实现的接口:

 Serializable,Comparable<BigDecimal>

需要记住:BigDecimal是Number的子类,其中Number是一个抽象类,为BigDecimal的格式转换功能提供了方法。


BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。因为本人也比较菜,做此文章只是为了熟记一下BigDecimal的精确小数功能,所以讲什么随心了...

 与BigInteger一样,BigDecimal拥有基本的数学运算方法,方法名都是像add、divide什么的,普遍好理解的名字,只要在开发工具(像eclipse等带有提示功能的)中输入就能有提示。
 在这主要说的就是舍入的方法了,因为BigDecimal是通过除法来进行舍入的,所以要熟记下面这个方法:

public BigDecimal divide(BigDecimal divisor,
                         int scale,
                         int roundingMode)
其参数:

  • divisor 是表示被除数。若只进行四舍五入可让divisor=1
  • scale  是表示结果保留小数位数
  • roundingMode 是表示要应用的舍入模式 

其中舍入模式有:(注这些舍入模式都为BigDecimal类的静态final方法)

public static final intROUND_HALF_UP :最常用的四舍五入模式

public static final intROUND_HALF_DOWN :五舍六入模式

public static final int ROUND_UP:全部进一位

public static final intROUND_DOWN: 直接全部舍去

等等,还有一些模式我至今没有遇到过,也就不提了

拿最普遍的四舍五入举例:

import java.math.BigDecimal;

public class H {

	/**
	 * 实现准确的四舍五入
	 * @param num 需要进行四舍五入的数字
	 * @param scale	要保留的小数位
	 * @return	返回四舍五入后的数据
	 */
	public static double f(double num,int scale) {
		//将double型数据转换为BigDecimal型
		//其中num1为除数,num2为被除数
		BigDecimal num1 = new BigDecimal(num);	
		BigDecimal num2 = new BigDecimal(1);
		
	//其中 doubleValue()方法是BigDecimal类从Number抽象类中继承过来的,用来将BigDecimal型数据转换成double型数据
		return num1.divide(num2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	public static void main(String[] args) {
		System.out.println(f(59.4684315613215648,3));
		System.out.println(f(59.4685315613215648,3));
		System.out.println(f(-15.5,0));
		System.out.println(f(15.5,0));
	}
}
运行结果为:

59.468
59.469
-16.0
16.0

就写到这了。写该文章的目的主要是为了让我自己能牢记一些知识点,并能熟练的操作。若写的不好或者有错误的地方,还请多多包容,也希望能指点一二。谢谢!



猜你喜欢

转载自blog.csdn.net/hjl_heart/article/details/79277994