系列文章目录

有Math取整方式,java自带运算,为什么还选要学习 BigDecimal


文章目录

  • 系列文章目录
  • 前言
  • 一、BigDecimal是什么?
  • 二、使用步骤
    • 1.构造器使用
    • 2.方法使用
  • 总结

前言

随着计算复杂,用户需求变大,传统取整不能满足用户需求,计算精度同样需要更加精确

1️⃣ 比如下面,浮点数影响了计算精度值

注:根本原因是:十进制值通常没有完全相同的二进制表示形式;十进制数的二进制表示形式可能不精确。只能无限接近于那个值

特别是金融项目,出现 0.30000000000000004 体验不是特别好。

2️⃣还有如果需要对金额,进行四舍五入,保留2位。Math.round() 不能满足事件需求

所以 我们才会考虑用 BigDecimal ,解决这些问题


一、BigDecimal是什么?

翻译:Big+Decimal (大的 十进制,双精度)
读音:[ˈdesɪml]
官方;Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算


二、使用步骤

1.构造器使用

代码如下(示例):

 BigDecimal bigDecimal=new BigDecimal(0.3);BigDecimal bigDecimal=new BigDecimal("0.3");

下面举例是其他的

BigDecimal(double val) 将双精度浮点型转换为BigDecimal
BigDecimal(String val) 将字符串形式转换为BigDecimal(推荐)

为什么推荐使用字符串形式呢?

可见,Double数据类型是会受到影响,所以推荐用字符串!

如果 一定要用Double,那我们可以把它先转化为字符串吧!有2种方法

BigDecimal d1=BigDecimal.valueOf(0.3);
BigDecimal d2=new BigDecimal(Double.toString(0.3));

2.方法使用

BigDecimal类型的数字可以用来做超大的浮点数的运算,如+、-、*、\等
其中除法需要涉及到 除不尽,小数处理

方法 说明
add(BigDecimal)
subtract(BigDecimal)
multiply(BigDecimal)
divide(BigDecimal ,int,RoundingMode) 除,3个参数,分别表示除数,保留小数点,小数点处理方式

代码如下(示例):

BigDecimal str1=new BigDecimal("0.9234567890123456789");
BigDecimal str2=new BigDecimal("0.1234567890123456789");System.out.println(str1.add(str2));
System.out.println(str1.subtract(str2));
System.out.println(str1.multiply(str2));


小数点处理方式(整理常用4种)

模式 说明 保留2位例子
RoundingMode.UP 向上取整 类似 (ceil) 1.051→1.06
RoundingMode.HALF_UP 四舍五进 (常用) 1.054→1.05;1.055→1.06
RoundingMode.DOWN 向下取整 类似(floor) 1.059→1.05
RoundingMode.HALF_DOWN 五舍六进 1.055→1.05;1.056→1.06

代码如下(示例):

 BigDecimal bigDecimal=new BigDecimal("1.051");System.out.println(bigDecimal.setScale(2, RoundingMode.UP));//1.06BigDecimal bigDecimal=new BigDecimal("1.059");System.out.println(bigDecimal.setScale(2, RoundingMode.DOWN));//1.05

我们可用 setScale单独进行小数点处理

我们用除法做一个小案例。

 BigDecimal str1=new BigDecimal("0.9234567890123456789");BigDecimal str2=new BigDecimal("0.1234567890123456789");System.out.println(str1.divide(str2,2,RoundingMode.HALF_UP));

总结

BigDecimal个人觉得是对Math基础用法补充:

  • 作用1、可让浮点数超大的进行运算
  • 作用2、可处理浮点数出现精度浮点问题
  • 作用3、可处理小数点保留位数

其实我也同时想起 Calendar 对 Date补充

还有可以去参考 Math用法,希望对你有帮助

Java中BigDecimal用法相关推荐

  1. Java中BigDecimal类介绍及用法

    Java中BigDecimal类介绍及用法 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高 ...

  2. java类型精度排序,Java中BigDecimal精度和相等比较的坑

    为什么要有bigdecimal ,他是干什么的 float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计 ...

  3. java中import用法

    java中import用法 单类型导入(single-type-import),例如import java.io.File; 按需类型导入(type-import-on-demand),例如 impo ...

  4. scale和java比较_浅谈java中BigDecimal的equals与compareTo的区别

    这两天在处理支付金额校验的时候出现了点问题,有个金额比较我用了BigDecimal的equals方法来比较两个金额是否相等,结果导致金额比较出现错误(比如3.0与3.00的比较等). [注:以下所讲都 ...

  5. Java中BigDecimal类型的加减乘除及大小比对

    Java中BigDecimal类型的加减乘除及大小比对 前言 BigDecimal解释 创建BigDecimal类型 加减乘除计算 结果分析 结论 除法的补充 两个BigDecimal的比对 前言 在 ...

  6. java中extends用法_JAVA的extends用法

    理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 cla ...

  7. java中continue用法

    java中continue用法 有时强迫一个循环提早反复是有用的,也就是,你可能想要继续运行循环,但是要忽略这次重复剩余的循环体的语句,所以 java提供了 continue 语句.continue ...

  8. Java中BigDecimal类常用方法,舍入策略

    标题 Java BigDecimal 的舍入模式 (RoundingMode)详解 提一下银行家算法 BigDecimal和BigInteger Java中BigDecimal常用方法 BigDeci ...

  9. java中switch用法举例范围_Java中Switch用法代码示例

    一.java当中的switch与C#相比有以下区别 注:在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样), 在java1.7后 ...

  10. java中Iterator用法总结

    Java中Iterator用法 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为"轻量级& ...

最新文章

  1. 链表问题7——判断一个链表是否为回文结构
  2. STM32 KEIL 串口打印printf使用详解
  3. 一致性算法- Paxos
  4. python爬虫的技能_python-爬虫技能升级记录
  5. 回归分析和卡方检验的区别_11个常见的多变量分析方法
  6. Chrome浏览器查看cookie
  7. 在Python,Java和Kotlin中标记参数和重载
  8. crt 8.7.3 黑暗模式_科技有意思 | 黑黑黑黑黑黑黑黑暗模式
  9. MSChart BarChart
  10. xmarin.android导航栏,Xamarin.Forms中心标题和透明导航栏 - Android
  11. 大数据在新型智慧城市的作用
  12. mongodb的连接和开启安全验证
  13. Sopcast软件中凤凰卫视频道列表代码
  14. 华为交换机路由器登陆密码详细操作
  15. 手机浏览器唤起微信实现分享
  16. 使用JS判断日期的有效性
  17. log4cxx vs2019编译
  18. 南大软院大神养成计划--HTML和CSS基础课程(二)
  19. 大学这么多比赛,我该参加哪个?
  20. Matlab笔记 第二章 基本操作与矩阵输入

热门文章

  1. c语言流程图形状什么意思,Visio中的基本流程图的各个形状的含义是什么?
  2. 总结Learning Efficient Single-stage Pedestrian Detectors by Asymptotic Localization Fitting
  3. 基于单片机设计的遥控数字音量控制D类功率放大器设计
  4. vue:ali 阿里矢量图库 ico
  5. hg8120c 维修使能工具_ONT 用户手册(中国移动) V300R016C10.doc
  6. 纬地道路纵断面设计教程_如何高效算量?市政道路从识图算量到施工工艺,一篇全搞定!...
  7. 基于ifix组态软件研究控制按钮权限
  8. [UPF]低功耗(Low Power Design)and UPF介紹
  9. 病房管理系统c语言设计,病房呼叫系统设计与仿真
  10. 教务管理系统的设计与实践