欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/3/20 编程问答 62 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。