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