在计算与金额有关的数据时,涉及到精度问题,所以建议使用BigDecimal。

一、BigDecimal转换的精度问题

        BigDecimal num1=new BigDecimal(0.05);BigDecimal num2=BigDecimal.valueOf(0.08);

在将double类型的数据转换为BigDecimal时,直接使用new BigDecimal() 的方式使用alibaba代码规范会提示如下。因为当数据比较精密时直接转换会造成精度丢失。float 浮点数类似。

二、BigDecimal的加减乘除

加法 add()函数 减法subtract()函数
乘法multipy()函数 除法divide()函数 绝对值abs()函数

        BigDecimal res1=num1.add(num2);BigDecimal res2=num1.subtract(num2);//setScale() 设置小数点后面保留几位小数BigDecimal res3= num1.multiply(num2).setScale(2,BigDecimal.ROUND_UP);BigDecimal res4=num1.divide(num2,2,BigDecimal.ROUND_UP);BigDecimal res5=num1.abs();

三、除法divide()参数使用

使用除法函数在divide的时候要设置各种参数,要精确的小数位数和舍入模式,不然会出现报错

我们可以看到divide函数的源码参数

public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)// BigDecimal  divisor 除数,int scale  精度小数位,int roundingMode 舍入模式

具体舍入模式有8种,根据业务需求合理选择即可。这里就不一一解释。

四、BigDecimal比较大小

判断是否为0,使用前面一种方式返回false,后面一种方式返回true。这个地方本人还踩过坑。所以建议使用 coparaTo() 函数比较大小

//使用compareTo方法比较
//注意:两个比较的参数均不能为null,否则会报空指针BigDecimal bigDecimal=new BigDecimal(String.valueOf(0.000000000000));System.out.println(bigDecimal.equals(BigDecimal.ZERO));System.out.println(bigDecimal.compareTo(BigDecimal.ZERO)==0);

BigDecimal的使用相关推荐

  1. BigDecimal 转换为int 或者其他类型

    我列举了转换的方法 BigDecimal HALF_UP = new BigDecimal("-12.44").setScale(1, RoundingMode.HALF_UP); ...

  2. Android 金钱计算BigDecimal 的使用

    今天做了一个购物车的功能 ,设计到了钱的计算,使用到了BigDecimal 晚上回来总结下 这个BigDecimal 计算钱呢很好用 其主要有 1 add 加法 2 subtract 减法 3 mul ...

  3. 在进行商业运算时解决BigDecimal的精度丢失问题

    System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.o ...

  4. java striptrailingzeros_java – 为什么不BigDecimal.stripTrailingZeros()总是删除所有尾随零?...

    我做了以下事情 MathContext context = new MathContext(7, RoundingMode.HALF_UP); BigDecimal roundedValue = ne ...

  5. js 实现精确加减乘除运算之BigDecimal.js

    在前端实际开发中,进行前端计算会出现丢失精度的问题,这里我们项目中运用了BigDecimal.js. js计算丢失精度原因 计算机的二进制实现和位数限制有些数无法有限表示.就像一些无理数不能有限表示, ...

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

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

  7. 为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! BigDecimal,相信对于很多人来说都不陌生,很多人都 ...

  8. 面试:BigDecimal一定不会丢失精度吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | urlify.cn/ZVN7Nb 我们基本已经形成了常识 ...

  9. Java中的BigDecimal类你真的了解吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:HikariCP www.jianshu.com/p/c81 ...

  10. 如何使用BigDecimal?

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

最新文章

  1. PCL使用RANSAC拟合三位平面
  2. nginx的HTTP模块编写
  3. Leetcode 703. 数据流中的第K大元素 解题思路及C++实现
  4. [C语言] 文件操作,解压华为官方固件UNDATE.APP工具(源代码);
  5. bilibili在线解析接口_SpringBoot+Gradle+MyBatisPlus3.x + Swagger搭建在线和离线API
  6. c语言goto语句用法_C语言的9种控制结构
  7. 怎样修改安卓位置服务器,修改安卓定位服务器地址
  8. cass道路设计教程_(完整版)南方CASS7.1绘制道路断面图教程
  9. PMP课程笔记:第8章 项目质量管理
  10. Recoil 的使用
  11. 程序员常用网站和工具(持续更新)
  12. DBCS(Double-Byte Character Set, 双位元组字元集)
  13. 计算机视觉 响应_视觉响应式布局的自动化测试
  14. 5G时代,玖玖星球云算链引领VR技术踏上新台阶
  15. 三菱plc恒压供水程序+威纶触摸屏程序 以控制水泵一用一备、一拖二、一拖三、一拖四、一拖四带小泵恒压功能
  16. 命中有时终须有,命中无时莫强求--命理理论
  17. 从python’s revenge看python反序列化
  18. 【C语言从青铜到王者】第零篇·与C语言来个约会
  19. 【正点原子MP157连载】第二十三章 Linux设备树-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
  20. matlab设置图片背景透明_Matlab ---- 有透明度的png图像的显示与图层叠加方法

热门文章

  1. RxJava入门指南
  2. 使用Handler的大致流程
  3. 笔记本外接显示器掉帧解决方法
  4. 收费邮箱价格及容量对比,收费邮箱与免费邮箱的区别?
  5. jxl可以操作excel2007吗?可以
  6. 软件实施工程师是一个什么样的工作?他的具体工作内容是什么?发展前景怎样?
  7. 2023年市场规模将超147亿美元,中国人工智能产业的“风口”来了吗?
  8. 莫烦python--搭建CNN
  9. 查询QQ号码是否在线
  10. 黑客成员煽动DDos攻击全球银行,多个国内银行赫然在列