有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类型的数字可以用来做超大的浮点数的运算,如+、-、*、等
其中除法需要涉及到 除不尽,小数处理
代码如下(示例):
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种)
代码如下(示例):
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条)