`
jz_2017
  • 浏览: 6258 次
社区版块
存档分类
最新评论

Divide Error for BigDecimal

阅读更多
java.lang.ArithmeticException:Non-terminating decimal expansion; no exact representable decimal result.

Reference: https://stackoverflow.com/questions/4591206/arithmeticexception-non-terminating-decimal-expansion-no-exact-representable?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

 

 

From the Java 5 docs (Java 8 docs here):

When a MathContext object is supplied with a precision setting of 0 (for example, MathContext.UNLIMITED), arithmetic operations are exact, as are the arithmetic methods which take no MathContext object. (This is the only behavior that was supported in releases prior to 5.)

As a corollary of computing the exact result, the rounding mode setting of a MathContext object with a precision setting of 0 is not used and thus irrelevant. In the case of divide, the exact quotient could have an infinitely long decimal expansion; for example, 1 divided by 3.

If the quotient has a nonterminating decimal expansion and the operation is specified to return an exact result, an ArithmeticException is thrown. Otherwise, the exact result of the division is returned, as done for other operations.

To fix, you need to do something like this:

a.divide(b,2,RoundingMode.HALF_UP)

where 2 is precision and RoundingMode.HALF_UP is rounding mode

分享到:
评论

相关推荐

    JS的高精度计算(BigDecimal)

    你是否因为JS端的小数计算的精度不足而发愁过呢 其实有个不错的资源可以利用。 引用附件的JS,就可以轻松搞定JS的计算问题了。...alert(new BigDecimal("10.00").divide(new BigDecimal("3E+10"))); } //--> </SCRIPT>

    BigDecimal类

    * `divide(BigDecimal)`: 将两个 BigDecimal 对象的值相除,然后返回这个对象。 * `toString()`: 将 BigDecimal 对象的数值转换成字符串。 * `doubleValue()`: 将 BigDecimal 对象中的值以双精度数返回。 * `float...

    javascript版BigDecimal类库

    2. **算术操作**:提供加法(`add`)、减法(`subtract`)、乘法(`multiply`)、除法(`divide`)等基本算术运算,这些操作能确保结果的精度不受JavaScript Number类型的限制。 3. **比较操作**:支持小于(`lt`)...

    bigdecimal

    return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } } ``` #### 五、关键点解析 1. **构造方法**: 在构造 `BigDecimal` 对象时,推荐使用 `Double.toString()` 来转换 `double` 类型的值...

    BigDecimal.js.zip

    var quotient = bigNum1.divide(bigNum2, 10, BigDecimal.ROUND_HALF_UP); ``` 此外,BigDecimal.js还支持其他数学运算,如乘法、求余数、开方等。在处理复杂的数学表达式时,还可以使用链式调用: ```javascript ...

    BigDecimal的计算

    - `divide(BigDecimal divisor)`:除法操作。 ##### 4. 精度设置与舍入模式 在进行数学运算时,可以通过 `setScale(int newScale, RoundingMode roundingMode)` 方法来指定结果的精度和舍入模式。常用的舍入模式...

    BigDecimal使用

    6. 精确的除法运算:使用 BigDecimal 的 divide 方法可以进行精确的除法运算,例如将两个 BigDecimal 对象相除并返回结果。需要注意的是,除法运算可能会出现无限循环的小数,为了避免这种情况,可以使用 scale 参数...

    java中BigDecimal的操作方法

    public static BigDecimal divide(String num1, String num2, int scale, RoundingMode roundingMode) { BigDecimal bd1 = new BigDecimal(num1); BigDecimal bd2 = new BigDecimal(num2); return bd1.divide(bd2...

    java BigDecimal操作

    其次,BigDecimal支持基本的算术运算,如加法(`add()`), 减法(`subtract()`), 乘法(`multiply()`)和除法(`divide()`). 分割除法时需注意,由于可能会出现无限循环小数,`divide()`方法需要指定舍入模式,例如`...

    MyEditTextApplication输入框BigDecimal计算价格

    这可能包括加法(BigDecimal.add())、减法(BigDecimal.subtract())、乘法(BigDecimal.multiply())或除法(BigDecimal.divide())操作。注意,BigDecimal的除法默认可能会抛出ArithmeticException,所以我们需要...

    BigDecimal的用法

    详细的描述BigDecimal的用法,使你能很快对BigDecimal有较深的认识

    详谈Java中BigDecimal的一个除法异常

    BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ``` - `divisor`:被除数,即除法运算中的除数。 - `scale`:指定结果的精度,即小数点后的位数。 - `roundingMode`:舍入模式,决定...

    BigDecimal加减乘除计算

    BigDecimal 提供了加法(add())、减法(subtract())、乘法(multiply())和除法(divide())等基本运算,以及求绝对值(abs())等方法。 1. 初始化 BigDecimal 对象: 初始化 BigDecimal 时,推荐使用字符串参数...

    java-BigInteger-BigDecimal类源码

    它还支持`add()`, `subtract()`, `multiply()`, `divide()`, `divideToIntegralValue()`等方法。 4. **舍入模式**:在执行除法运算时,`BigDecimal`提供了多种舍入模式,如`ROUND_UP`, `ROUND_DOWN`, `ROUND_HALF_...

    关于java中BigDecimal的简介(csdn)————程序.pdf

    `divide()`方法需要传入一个`BigDecimal`对象作为除数,并可以指定精度和舍入模式。例如: ```java BigDecimal result = bd1.divide(bd2, 2, RoundingMode.HALF_UP); ``` 上面的代码将进行除法运算,结果保留两...

    BigInteger BigDecimal 使用

    BigDecimal result = bd1.divide(bd2, 2, RoundingMode.HALF_UP); // 结果为3.5,四舍五入 ``` 在实际开发中,`BigInteger`和`BigDecimal`常用于金融计算、密码学算法、数学计算等场景,确保数据的精确性。需要注意...

    javascript BigDecimal 大数运算类 单文件浓缩版

    e = e.add(BigDecimal.prototype.ONE.divide(denominator, scale, BigDecimal.prototype.ROUND_HALF_UP)); denominator = denominator.multiply(new BigDecimal(iteration+'')); ++iteration; } equal(e....

    BigDecimal计算

    2. **基本运算**:`BigDecimal`支持加法(`add()`), 减法(`subtract()`), 乘法(`multiply()`)和除法(`divide()`). 这些方法返回新的`BigDecimal`对象,保持原有的精度。 3. **舍入模式**:在进行除法运算时,可能会...

    Java中BigDecimal的加减乘除、比较大小与使用注意事项

    1. **不可变性**:`BigDecimal`对象是不可变的,这意味着所有修改操作(如`add()`, `subtract()`, `multiply()`, `divide()`)都会创建新的`BigDecimal`实例。因此,赋值操作应如示例所示: ```java amount = ...

    Bigdecimal.js

    `BigDecimal`类库提供了丰富的操作方法,包括加法(add)、减法(subtract)、乘法(multiply)、除法(divide)、求余(remainder)、比较(compare)等,这些方法都是为了确保在进行高精度运算时的准确无误。...

Global site tag (gtag.js) - Google Analytics