zoukankan      html  css  js  c++  java
  • 深入理解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



     

  • 相关阅读:
    HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋)
    HUD 2203 亲和串
    POJ 3461 Oulipo(乌力波)
    FJNU 1154 Fat Brother And His Love(胖哥与女神)
    Polygon Triangles
    Double it(水题模拟+逆向思维)
    Sphenic numbers(素数筛)
    Desktop(模拟)2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest
    Weather Station(基础DP)2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest
    找零钱(经典DP)
  • 原文地址:https://www.cnblogs.com/yz-yang/p/10997593.html
Copyright © 2011-2022 走看看