首頁 > Java > java教程 > 主體

如何避免 BigDecimal 除法中的「ArithmeticException:非終止十進位擴充」?

Patricia Arquette
發布: 2024-11-12 10:50:02
原創
678 人瀏覽過

How to Avoid

避免BigDecimal 除法中的非終止小數擴展

Java 的BigDecimal 類別旨在促進高精度數學運算,但有時它會出「ArithmeticException:非終止十進位擴展;沒有精確可表示的十進位結果」錯誤。當兩個 BigDecimal 物件相除且商具有無限小數擴展時,會出現此異常。

異常原因

根據 BigDecimal 文檔,當沒有 MathContext 物件 (指定精度和捨入模式)被提供,算術運算被精確地執行。如果商數具有非終止小數擴展且無法精確表示,則會引發異常。

範例

BigDecimal a = new BigDecimal("1.6");
BigDecimal b = new BigDecimal("9.2");
a.divide(b) // raises the ArithmeticException
登入後複製

修補

要解決此問題,您可以指定一個具有非零精度和捨入的MathContext 物件模式。例如:

a.divide(b, 2, RoundingMode.HALF_UP)
登入後複製

這裡,2 指定比例(小數位數),RoundingMode.HALF_UP 表示舍入方法。

其他資訊

  • ArithmeticContext 物件允許您控制捨入和精確度
  • 如果無法得到準確的結果,運算將使用指定的舍入模式來近似結果。
  • 更多詳細資訊請參閱Java 文件或這篇部落格文章:https: //blog.frankel.ch/2013/09/avoid-arithmetic-exception-in-java-bigdecimals.html

以上是如何避免 BigDecimal 除法中的「ArithmeticException:非終止十進位擴充」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板