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相关推荐

  1. Java double 保留一个小数、理解BigDecimal、Java解决精度问题

    Java double 保留一个小数 两种方法 @Testpublic void test2() {double f = 234.353333000000000000000000;BigDecimal ...

  2. bigdecimal正确用法_深入理解 BigDecimal 的使用

    什么是 BigDecimal BigDecimal 可以表示一个任意大小且精度完全准确的浮点数. 为什么用 BigDecimal 而不用 double Talk is cheap, Show me t ...

  3. Java中BigDecimal工具类(支持空值运算版)

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 需要计算的场景绕不过去会使用BigDecimal类, ...

  4. 如何使用BigDecimal?

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 本文来源于读者投稿,已授权原创申明. 前言:BigDecimal的产生背景 在Java的8种基 ...

  5. 字符串转bigdecimal类型_BigDecimal你会用吗?

    点击关注"故里学Java" 右上角"设为星标"好文章不错过 在我们日常工作中数值计算是不可避免的,特别是电商类系统中,这个问题一般情况下我们都是特别注意的,但是 ...

  6. Java中使用BigDecimal进行浮点数精确计算 超大整数 浮点数等计算,没有数位限制...

    (注:前面写了一个超大整数相加的类,参见: 超大整数相加,超过了long的范围,你要怎么做!,后来有朋友评论说BigDecimal可以完全实现我的这这个功能,刚开始的时候,我还不服气,据我所知那里有这 ...

  7. 深入理解C#第三版部分内容

     最近,粗略的读了<深入理解C#(第三版)>这本技术书,书中介绍了C#不同版本之间的不同以及新的功能. 现在将部分摘录的内容贴在下面,以备查阅. C#语言特性: 1.C#2.0 C#2的主 ...

  8. bigdicmal除法精度设置_Java BigDecimal浮点数运算--如何保证运算精度不溢出

    加减乘除四则运算是高级程序设计语言(不论机器语言.汇编还是其他高级语言)最基础的部分,Java作为最流行的软件开发语言之一,涉及四则运算的程序代码和功能业务随处可见.在笔者从事的基于Java语言银行. ...

  9. java.math.BigDecimal的用法-商业计算

    如果我们编译运行下面这个程序会看到什么? public class test{      public static void main(String [] args){          Syste ...

  10. mybatis 传入id_想深入理解MyBatis架构及原理实例分析 把握这些就够了

    前言 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询 ...

最新文章

  1. pb分组数据累计_A轮公司数据分析面试经验
  2. 深度好文:Linux操作系统内存
  3. Codeforces Round #632 (Div. 2) F. Kate and imperfection 数论 + 贪心
  4. bootice 此功能仅在uefi环境下可用_电脑新手必掌握基础知识:BIOS、EFI与UEFI详解!...
  5. Python编辑工具的全新版本,PyCharm 2020.1 稳定版发布
  6. struts-step
  7. app评论如何抓取_可能是史上最独一无二的中国高铁APP——高铁通
  8. linux添加隧道,linux配置多级服务器登录和隧道映射
  9. 无需脑图 无需思维导图 看Word大纲视图
  10. 文件上传漏洞—简单利用(墨者学院靶场)
  11. macbook历代_苹果笔记本的进化史 历代Macbook产品回顾
  12. Prisma(一):初识
  13. ikuai路由管理系统教程
  14. asp.net905-二次元网站系统#毕业设计
  15. tomcat命令行重启
  16. win10 中使用bat脚本关机,重启 代码
  17. 问题 C: 网格涂色
  18. 16世纪的旷世奇才:大学弃医丛数,仅用20年就独立发明了温度计、军事罗盘、天文望远镜,后半生双目失明还能写出惊人科学著作
  19. 爬取豆瓣电影top250提取电影分类进行数据分析
  20. IT行业人才工资水平曝光,收入情况调查,薪水揭密

热门文章

  1. Liunx系统下的 Nginx的安装与启动
  2. hmaster和datanaode启动后很快停止_手动和全自动柴油发电机启动方法各自有什么优点?...
  3. 数据库与表的操作之创建表(CREATE TABLE)
  4. Document/View 模式下的窗口重绘
  5. ListView若干点
  6. Python-20-异常处理
  7. spring+mybatis+log4j 输出SQL
  8. 《Netty权威指南》(二)NIO 入门
  9. C#读写三菱Fx PLC 使用Fx 串口协议 读写Fx3U设备
  10. vue-router的简单理解