BigDecimal类setScale方法问题:算数异常,精确度丢失-ArithmeticException: Rounding necessary
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的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Oracle中concat与||区别(以
- 下一篇: js/jq进行日期格式化为:yyyy-M