Java中BigDecimal用法

系列文章目录

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



前言

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

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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值