Java中BigDecimal用法

Java中BigDecimal用法,第1张

Java中BigDecimal用法 系列文章目录

有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.06RoundingMode.HALF_UP四舍五进 (常用)1.054→1.05;1.055→1.06RoundingMode.DOWN向下取整 类似(floor)1.059→1.05RoundingMode.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.06

 BigDecimal 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用法,希望对你有帮助

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5695518.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存