Double转BigDecimal并保留两位小数出现异常: java.lang.ArithmeticException: Rounding necessary
分享知识 传递快乐
Double 转 BigDecima l并保留两位小数出现异常: java.lang.ArithmeticException: Rounding necessary 。
代码如下:
public static void main(String[] args) {Double d1 = 0.10;BigDecimal bigDecimal1 = new BigDecimal(d1).setScale(2);System.out.println(bigDecimal1);// 或Double d2 = 0.123;BigDecimal bigDecimal2 = new BigDecimal(d2).setScale(2);System.out.println(bigDecimal2);
}
输出结果:
java.lang.ArithmeticException: Rounding necessaryjava.lang.ArithmeticException: Rounding necessary
异常分析:
使用 Double 转 BigDecimal 并保留两位小数出现异常: java.lang.ArithmeticException: Rounding necessary 的原因是:精度丢失。
setScale(int newScale) 方法内部调用 setScale(int newScale, int roundingMode) 方法,传入默认舍入模式:ROUND_UNNECESSARY,在方法内部对精度处理时,如果存在精度丢失则抛出异常,如果不存在精度丢失则不会抛出异常。
解决方案
public static void main(String[] args) {Double d = 0.10;BigDecimal bigDecimal1 = new BigDecimal(d).setScale(2,BigDecimal.ROUND_FLOOR );BigDecimal bigDecimal2 = new BigDecimal(d+"").setScale(2);System.out.println(bigDecimal1);System.out.println(bigDecimal2);// 精度3位以上,结果保留两位d = 0.125;BigDecimal bigDecimal2 = new BigDecimal(d + "").setScale(2,BigDecimal.ROUND_FLOOR);System.out.println(bigDecimal2);}
输出结果
0.10
0.10
0.12
拓展
BigDecimal 提供了几种舍入方式:
public final static int ROUND_DOWN:舍入模式向零舍入。 永远不要在丢弃的分数之前增加数字(即截断)。 请注意,此舍入模式永远不会增加计算值的大小
public final static int ROUND_CEILING:舍入模式向正无穷大舍入。 如果BigDecimal为正数,则表现为ROUND_UP ; 如果为负,则表现为ROUND_DOWN 。 请注意,此舍入模式永远不会减少计算值。
public final static int ROUND_FLOOR:舍入模式向负无穷大舍入。 如果BigDecimal为正数,则按照ROUND_DOWN进行ROUND_DOWN ; 如果为负,则按照ROUND_UP方式行事。 请注意,此舍入模式不会增加计算值
public final static int ROUND_HALF_DOWN:舍入模式向“最近邻居”舍入,除非两个邻居等距,在这种情况下向下舍入。 如果丢弃的分数 > 0.5,则行为与ROUND_UP ; 否则,行为与ROUND_DOWN 。
public final static int ROUND_HALF_EVEN:舍入模式向“最近邻居”舍入,除非两个邻居等距,在这种情况下,向偶数邻居舍入。 如果丢弃的分数左边的数字是奇数,则行为与ROUND_HALF_UP ; 如果为ROUND_HALF_DOWN则表现为ROUND_HALF_DOWN 。 请注意,这是在一系列计算中重复应用时最小化累积误差的舍入模式。
public final static int ROUND_HALF_UP:舍入模式向“最近邻居”舍入,除非两个邻居等距,在这种情况下向上舍入。 如果丢弃的分数 ≥ 0.5,则行为与ROUND_UP ; 否则,行为与ROUND_DOWN 。 请注意,这是我们大多数人在小学时所教的舍入模式。是常用的四舍五入方式
public final static int ROUND_UNNECESSARY:舍入模式断言请求的操作具有精确结果,因此不需要舍入。 如果在产生不精确结果的操作上指定了此舍入模式,则会引发ArithmeticException 。
public final static int ROUND_UP:舍入模式从零舍入。 总是在非零丢弃分数之前增加数字。 请注意,此舍入模式永远不会降低计算值的大小。。
—————————
如有不足请留言指正
相互学习,共同进步
Double转BigDecimal并保留两位小数出现异常: java.lang.ArithmeticException: Rounding necessary相关推荐
- BigDecimal四舍五入保留两位小数
import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public c ...
- java怎么输出保留两位小数_剖析Java输出怎么保留两位小数
Java中,当两个整数相除时,由于小数点以后的数字会被截断,运算结果将为整数,此时若希望得到运算结果为浮点数,必须将两整数其一或是两者都强制转换为浮点数,也就是Java输出怎么保留两位小数?接下来郑州 ...
- bigdecimal 除法保留两位小数_【名师课堂】苏教数学五年级上总复习9.4小数的四则计算...
微课视频第一课时 微课视频第二课时 电子课本 同步练习 一.计算 15.3+4.72+4.7+5.28 3.5×5.2+0.35×48 34.8-(4.8+9.7) ...
- java相除保留两位小数_Java:Java快速入门
源代码组织方式 Java程序由package+class组成,package对应目录的相对路径. 1 package com.happyframework.javastudy.hello;2 3 pu ...
- BigDecimal四舍五入后保留两位小数
测试代码如下:double dayDiff2 = 5.06135778;BigDecimal usedM = new BigDecimal(dayDiff2);//保留两位小数且四舍五入usedM = ...
- c语言中的字符变量用保留两位小数,字符数字转换保留2位小数
/** * Double类型的数据保留两位小数 * * [@param](https://my.oschina.net/u/2303379) value * [@return](https://my. ...
- sql两数相除保留两位小数_sql 除法运算 保留两位小数
js限制输入数字能输入小数点,js定义数组,js往数组中添加数据,js将字符型转为数字型,除法结果保留两位小数--js小测:计算比赛得分 一个朋友跟我说要去给某个比赛算分: 规则:去掉最低分最高分求平 ...
- Java中让浮点型数据保留两位小数的四种方法
hello,你好呀,我是灰小猿,一个超会写bug的程序猿! 今天在进行开发的过程中遇到了一个小问题,是关于如何将double类型的数据保留两位小数.突然发现这方面有一点欠缺,就来总结一下. 一.Str ...
- java 不四舍五入 保留,java保留两位小数(不四舍五入)
这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧 复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat d ...
最新文章
- 处理项目重大质量问题的思路和原则
- 前端学习(1411):多人管理31数据分页2
- spss可以关键词词频分析吗_词频分析及常用工具比较研究.pdf
- PYTHON爬取拉钩网
- matlab hold all,Matlab中的命令hold on hold off | 学步园
- re学习笔记(65)BUUCTF - re - [GKCTF2020]Chellys identity
- [本体论][UML][统一建模语言][软件建模][OWL]从本体论到UML到OWL
- 不懂英文能靠建站卖站达到月入上万?
- Tasteless challenges medium WP
- 程序员分享:最近面试 Java 后端开发的感受
- python爬虫入门之————————————————案例演练
- flutter学习笔记--传递信息
- php sleep usleep,php中sleep()和usleep()函数使用对比
- 网络七层结构(讲人话)
- seek()函数与tell()函数
- python常用功能_Python常用功能函数系列总结(七)
- springboot基础学习笔记
- abbplc型号_ABB PLC选型手册.pdf
- 卷影复制服务错误: 调用程序 CoCreateInstance 时的意外错误。hr = 0x8007045b, 系统正在关机。
- 戴尔笔记本——减低风扇声音的一种办法