BigDecimal的使用
在计算与金额有关的数据时,涉及到精度问题,所以建议使用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的使用相关推荐
- BigDecimal 转换为int 或者其他类型
我列举了转换的方法 BigDecimal HALF_UP = new BigDecimal("-12.44").setScale(1, RoundingMode.HALF_UP); ...
- Android 金钱计算BigDecimal 的使用
今天做了一个购物车的功能 ,设计到了钱的计算,使用到了BigDecimal 晚上回来总结下 这个BigDecimal 计算钱呢很好用 其主要有 1 add 加法 2 subtract 减法 3 mul ...
- 在进行商业运算时解决BigDecimal的精度丢失问题
System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.o ...
- java striptrailingzeros_java – 为什么不BigDecimal.stripTrailingZeros()总是删除所有尾随零?...
我做了以下事情 MathContext context = new MathContext(7, RoundingMode.HALF_UP); BigDecimal roundedValue = ne ...
- js 实现精确加减乘除运算之BigDecimal.js
在前端实际开发中,进行前端计算会出现丢失精度的问题,这里我们项目中运用了BigDecimal.js. js计算丢失精度原因 计算机的二进制实现和位数限制有些数无法有限表示.就像一些无理数不能有限表示, ...
- Java中BigDecimal工具类(支持空值运算版)
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 需要计算的场景绕不过去会使用BigDecimal类, ...
- 为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! BigDecimal,相信对于很多人来说都不陌生,很多人都 ...
- 面试:BigDecimal一定不会丢失精度吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | urlify.cn/ZVN7Nb 我们基本已经形成了常识 ...
- Java中的BigDecimal类你真的了解吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:HikariCP www.jianshu.com/p/c81 ...
- 如何使用BigDecimal?
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 本文来源于读者投稿,已授权原创申明. 前言:BigDecimal的产生背景 在Java的8种基 ...
最新文章
- PCL使用RANSAC拟合三位平面
- nginx的HTTP模块编写
- Leetcode 703. 数据流中的第K大元素 解题思路及C++实现
- [C语言] 文件操作,解压华为官方固件UNDATE.APP工具(源代码);
- bilibili在线解析接口_SpringBoot+Gradle+MyBatisPlus3.x + Swagger搭建在线和离线API
- c语言goto语句用法_C语言的9种控制结构
- 怎样修改安卓位置服务器,修改安卓定位服务器地址
- cass道路设计教程_(完整版)南方CASS7.1绘制道路断面图教程
- PMP课程笔记:第8章 项目质量管理
- Recoil 的使用
- 程序员常用网站和工具(持续更新)
- DBCS(Double-Byte Character Set, 双位元组字元集)
- 计算机视觉 响应_视觉响应式布局的自动化测试
- 5G时代,玖玖星球云算链引领VR技术踏上新台阶
- 三菱plc恒压供水程序+威纶触摸屏程序 以控制水泵一用一备、一拖二、一拖三、一拖四、一拖四带小泵恒压功能
- 命中有时终须有,命中无时莫强求--命理理论
- 从python’s revenge看python反序列化
- 【C语言从青铜到王者】第零篇·与C语言来个约会
- 【正点原子MP157连载】第二十三章 Linux设备树-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
- matlab设置图片背景透明_Matlab ---- 有透明度的png图像的显示与图层叠加方法