我是靠谱客的博主 俊秀大侠,最近开发中收集的这篇文章主要介绍深入理解BigDecimal,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

1、BigDecimal简介

    BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂。因此,BigDecimal表示的数值是(unscaledValue × 10-scale)。

2、API

   (1)构造器

  BigDecimal(int)       创建一个具有参数所指定整数值的对象。      
  BigDecimal(double)    创建一个具有参数所指定双精度值的对象,如果该double转化为二进制会丢精度,该方法可能丢失精度。
  BigDecimal(long) 创建一个具有参数所指定长整数值的对象。 BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象,推荐使用。
(2)方法

    add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。
    subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
    multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。
    divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。
    toString() 将BigDecimal对象的数值转换成字符串。
    doubleValue() 将BigDecimal对象中的值以双精度数返回。
    floatValue() 将BigDecimal对象中的值以单精度数返回。
    longValue() 将BigDecimal对象中的值以长整数返回。
    intValue() 将BigDecimal对象中的值以整数返回。

3、源码解读

   (1)属性

    intVal 表示BigDecimal未缩放值

    scale  比例-整数标度(如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂)

    precision 这个BigDecimal中的小数位数,如果是,则为0数字的数目是未知的(后备信息)。如果非零,值是保证正确的。(不是很理解)

    stringCache 存对应的字符串

    intCompact 如果这个BigDecimal的有效值和绝对值是小于或等于{@code Long.MAX_VALUE},值可以是紧凑地存储在这个字段中并用于计算。

   (2)add

public BigDecimal add(BigDecimal augend) {

     //1、intCompact都不等于与Long.MAX_VALUE,传this.intCompact,否则传intVal
     if (this.intCompact != INFLATED) {
         if ((augend.intCompact != INFLATED)) {
             return add(this.intCompact, this.scale, augend.intCompact, augend.scale);
        } else {
            return add(this.intCompact, this.scale, augend.intVal, augend.scale);
       }
    } else {
       if ((augend.intCompact != INFLATED)) {
            return add(augend.intCompact, augend.scale, this.intVal, this.scale);
       } else {
            return add(this.intVal, this.scale, augend.intVal, augend.scale);
       }
   }
}

 

 

 

 

 

https://www.jianshu.com/p/c81edc59546c

https://blog.csdn.net/jackiehff/article/details/8582449



 

 

转载于:https://www.cnblogs.com/yz-yang/p/10997593.html

最后

以上就是俊秀大侠为你收集整理的深入理解BigDecimal的全部内容,希望文章能够帮你解决深入理解BigDecimal所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部