BigDecimal类setScale方法问题:算数异常,精确度丢失-ArithmeticException: Rounding necessary

在运行如下代码时,

package BigDecimal精确度;import java.math.BigDecimal;public class BigDecimalSetSacle {public static void main(String[] args) {BigDecimal decimal = new BigDecimal("58.33888");BigDecimal result = decimal .setScale(2);System.out.println(result); }
}

会报算数异常:

Exception in thread "main" java.lang.ArithmeticException: Rounding necessary
at java.math.BigDecimal.commonNeedIncrement(BigDecimal.java:4148)
at java.math.BigDecimal.needIncrement(BigDecimal.java:4204)
at java.math.BigDecimal.divideAndRound(BigDecimal.java:4112)
at java.math.BigDecimal.setScale(BigDecimal.java:2452)
at java.math.BigDecimal.setScale(BigDecimal.java:2512)
at BigDecimal精确度.BigDecimalSetSacle.main(BigDecimalSetSacle.java:9)

原因是:没有设置mode,setScale方法,不给mode时,默认会设置mode为:ROUND_UNNECESSARY

但是ROUND_UNNECESSARY,在精确度丢失时,抛出异常。

所以,如果需要使用setScale方法,建议根据需要传入指定的mode,不要使用默认,否则会抛出异常!

默认的setScale(int newSacle)方法,只要参数的newSacle的大小,比this的小数点后位数小,则会抛出异常。

BigDecimal类setScale方法问题:算数异常,精确度丢失-ArithmeticException: Rounding necessary相关推荐

  1. BigDecimal类 setScale()方法java.lang.ArithmeticException: Rounding necessary

    BigDecimal调用setScale方法时,当未设置舍入模式时,系统会给个默认ROUND_UNNECESSARY(int 值为7)值,如果小数点后不为零,而且要保留的小数位数小于旧小数位数,那么此 ...

  2. Double转BigDecimal并保留两位小数出现异常: java.lang.ArithmeticException: Rounding necessary

    分享知识 传递快乐 Double 转 BigDecima l并保留两位小数出现异常: java.lang.ArithmeticException: Rounding necessary . 代码如下: ...

  3. java bigdecimal.round_down,java BigDecimal 的 setScale() 方法的 BigDecimal.ROUND_DOWN 舍入模式的BUG,坑...

    因为项目使用到 BigDecimal.ROUND_DOWN 接近零的舍入模式 ,没想到有一个 使用的坑. 下面来例子说明: String add = "67.80"; System ...

  4. Java使用BigDecimal的setScale方法进行百位向上取整

    int num = 199; BigDecimal bd = new BigDecimal(num); bd = bd.setScale(-2, BigDecimal.ROUND_DOWN); Sys ...

  5. 【java笔记】java中用于小数进位的BigDecimal.setScale方法

    BigDecimal.setScale主要用于对BigDecimal数据小数点后的位数进行进位.舍位.截断等操作.其进位方式主要有以下8种,依次分别对应着数字0~7,即写它们和写它们对应的数字是等价的 ...

  6. JAVA基础再回首(十三)——BigInteger类、BigDecimal类、Date类、DateFormat类、Calendar类

    JAVA基础再回首(十三)--BigInteger类.BigDecimal类.Date类.DateFormat类.Calendar类 版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://b ...

  7. 4、大数字运算(BigInteger类和BigDecimal类)

    在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类.这两个类用于高精度计算,其中 BigInteger 类是针对 ...

  8. 第三次学JAVA再学不好就吃翔(part71)--BigDecimal类

    学习笔记,仅供参考,有错必纠 文章目录 BigDecimal类 构造方法 方法 add subtract multiply divide valueOf 举个例子 BigDecimal类 BigDec ...

  9. Java快速入门到精通—大数字运算(BigDecimal 类)

    在Java中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类.这两个类用于高精度计算,其中BigInteger 类是针对整型大 ...

最新文章

  1. spark,hadoop区别
  2. js之浅拷贝和深拷贝
  3. linux ssh密钥认证
  4. 160个Crackme026之六段式注册码详解
  5. 跨浏览器检测某个节点是不是另一个节点的后代
  6. C#6.0 十大常用特性
  7. 正怎表达式在爬虫里的应用
  8. Ubuntu 16上命令行提示长目录的解决办法
  9. ANSI是什么编码?
  10. 23位子网掩码是多少_无敌子网掩码(IP地址)计算方法(完全心算法)
  11. 一种串口扩展电路应用
  12. 小米 note3 android,小米NOTE3 MIUI9.6稳定版 开启全面屏手势和屏蔽经典物理按键全攻略...
  13. ORA-29913,ORA-29400,KUP-00554,KUP-01005,KUP-01007 oracle外部表报错解决记录
  14. MFC中Wnd.PostMessage()的作用
  15. N1盒子安装 aria2(带AriaNg前端)
  16. 我的世界1.14java原版命令_我的世界1.14.4第一个预览版发布 添加了debugreport命令...
  17. zabbix之 zabbix server 跟 agent 更换ip地址
  18. 数据可视化之美 -- 以Matlab、Python为工具
  19. centos 7安装matlab的两种方法(桌面安装和命令行安装)
  20. A NOVEL DEEP FEATURE FUSION NETWORK FOR REMOTE SENSING SCENE CLASSIFICATION(论文翻译)

热门文章

  1. QPainter中坐标系变换问题
  2. stdthread(6)并发mutex
  3. 趣链 BitXHub跨链平台 (10)跨链自治
  4. (chap6 Http首部) 为Cookie服务的首部字段
  5. java面试题3(java基础)
  6. Goroutine池
  7. 椭圆曲线加密算法ECC
  8. python——多态
  9. MySQL—外连接查询
  10. 04-多核多cluster多系统之间缓存一致性概述