[JavaScript] java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result
- 2014 6/24
- カテゴリー : 未分類
- bigdecimal.js . JavaScript
- コメントを書く
JavaScript で浮動小数を計算する npm モジュール bigdecimal.js で、割り算を行う divide メソッド使ったらエラーが発生しました。
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result |
割り算の結果が、循環小数になる場合のエラーみたいです。
対応方法としては、循環小数になったときの処理を divide メソッドの第2、第3引数にしていしてあげればOKです。
var bigdecimal = require("bigdecimal"); // (1) 割り算の結果が、循環小数になるエラーの例 var one = new bigdecimal.BigDecimal(1); var three = new bigdecimal.BigDecimal(3); one.divide(three); // java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result // (2) エラーにならないように対応した例 // 割り算の結果を小数点第3位で四捨五入する場合は下記のような感じ var HALF_UP = bigdecimal.RoundingMode.HALF_UP(); var result = one.divide(three, 2, HALF_UP); result.floatValue(); // 0.33 |
ちょっと面倒ですが、厳密に値を扱えるのは良いですね。
参考情報
- iriscouch/bigdecimal.js: Arbitrary-precision Javascript BigInteger and BigDecimal real numbers
- BigDecimal.divide() 使用時の注意 – 誰も見ませんように(・`ω・´) (`・ω´・)
- BigDecimalを使った割り算について – QA@IT
- Java BigDecimalで足し算, 引き算, 掛け算, 割り算そして四捨五入する方法 | ホームページ制作のサカエン(墨田区)