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