0 0

怎么解决BigDecimal里面无限循环小数的问题啊?5

Non-terminating decimal expansion; no exact representable decimal result.

 
2012年3月11日 13:12

4个答案 按时间排序 按投票排序

0 0

通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛这个异常。

解决之道:就是给divide设置精确的小数点divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN);

2012年3月12日 14:46
0 0

引用

//设置舍入:
public BigDecimal divide(BigDecimal divisor,
                         int roundingMode)
public BigDecimal divide(BigDecimal divisor,
                         RoundingMode roundingMode)
public BigDecimal divide(BigDecimal divisor,
                         int scale,
                         int roundingMode)
public BigDecimal divide(BigDecimal divisor,
                         MathContext mc)
//如果只要整数部分:
public BigDecimal divideToIntegralValue(BigDecimal divisor)
public BigDecimal divideToIntegralValue(BigDecimal divisor,
                                        MathContext mc)

//要相除的值和计算的余数:
public BigDecimal[] divideAndRemainder(BigDecimal divisor)

自己根据实际情况选择。

还要一种方式就是自己实现连分式表示类型,呵呵

2012年3月11日 21:34
0 0

你是不是做除法?

divide(BigDecimal divisor, int scale, RoundingMode roundingMode)


你需要指定精度:scale, 舍入模式:roundingMode

参照:
http://zhangyeny.iteye.com/blog/1170595

2012年3月11日 15:43
0 0

可以设置精度,bigDecimal.setScale(int newScale) 的

2012年3月11日 15:39

相关推荐

    bigdecimal

    4. **除法**: 使用 `divide()` 方法,需要注意的是除法可能产生无限循环小数,因此通常需要指定舍入模式和小数点后的保留位数。 #### 四、示例代码解析 根据提供的代码示例,我们可以更详细地了解如何在实际应用中...

    java BigDecimal操作

    分割除法时需注意,由于可能会出现无限循环小数,`divide()`方法需要指定舍入模式,例如`RoundingMode.HALF_UP`表示四舍五入。 BigDecimal还提供了比较操作,如`compareTo()`方法,用于比较两个BigDecimal值的大小...

    BigDecimal使用

    需要注意的是,除法运算可能会出现无限循环的小数,为了避免这种情况,可以使用 scale 参数指定小数点后的精度。 7. 四舍五入:在进行除法运算时,可以使用 ROUND_HALF_UP 参数指定四舍五入的方式,以避免精度损失...

    BigDecimal计算

    3. **舍入模式**:在进行除法运算时,可能会出现无限循环的小数。`divide()`方法可以接受一个`RoundingMode`参数来指定如何处理这种情况。例如,`RoundingMode.HALF_UP`会四舍五入到最接近的整数。 4. **比较操作**...

    使用BigDecimal进行精确运算(实现加减乘除运算)

    需要注意的是,BigDecimal的除法操作可能会抛出`ArithmeticException`,因为除不尽时默认不允许无限循环小数。因此,通常需要指定一个精度(scale)和舍入模式(RoundingMode),以控制结果的精度和处理除不尽的情况...

    小数除法计算中的错误分析及应对措施.pdf-文档整理可打印

    2. **除不尽的无限循环小数**:在数学中,有些除法会产生无限循环小数。在编程中,如果处理不当,这可能导致程序陷入无限循环或者结果不准确。 3. **舍入误差**:当计算结果需要被四舍五入时,选择何种舍入策略(如...

    【Java】BigDecimal实现加减乘除运算代码

    在除法运算中,我们通常需要指定一个`scale`(保留的小数位数)以及`RoundingMode`(舍入模式),以处理可能出现的无限循环小数。这里使用了`HALF_UP`模式,即四舍五入。 为了方便使用,可以封装这些方法在一个工具...

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

    no exact representable decimal result." 提示我们,当前的除法运算会导致无限循环的小数部分,Java无法为这样的结果找到一个精确的`BigDecimal`表示。为了解决这个问题,我们需要在调用`divide`方法时指定商的...

    Java BigDecimal类的使用和注意事项

    如果`BigDecimal`的标度过大,可能会导致无限循环小数,这在某些计算中可能不是预期的行为。在使用`stripTrailingZeros()`方法移除尾随零后,可能需要检查标度以避免这种情况。 7. **效率优化**: 可以通过`add`,...

    Android简易计算器

    对于无限循环小数精确到小数点后10位,可能需要自定义数据类型或使用BigDecimal类来实现高精度计算。 6. **用户交互**:计算器的界面需要响应用户的输入,如点击数字按钮、运算符按钮,以及显示结果。这涉及到了...

    Java 计算类

    不指定舍入模式直接调用divide可能导致ArithmeticException异常,因为默认情况下,无限循环小数是不被接受的。 - 在进行加、减、乘运算时,如果操作数中包含null或空字符串,应该将其转换为0后再进行计算。这是为了...

    Java中实现浮点数的精确计算

    例如,`0.1`这个简单的十进制数,在二进制下实际上是无限循环的小数,因此在计算机中只能近似存储。 #### 问题实例 在给定的代码示例中,可以看到几个简单的计算操作: ```java public class Test { public ...

    解决javascript中的浮点数计算不精确问题

    例如,0.1在二进制中是无限循环的,导致在计算机内存中无法完全精确表示,从而在进行计算时引入误差。 浮点数的不精确性主要体现在以下场景: 1. 相加和相减:即使两个看似相等的浮点数(如0.1 + 0.2)在JavaScript...

    【项目实践】商业计算怎样才能保证精度不丢失(csdn)————程序.pdf

    对于除法操作,由于可能存在除不尽的情况,可以使用`divide(BigDecimal divisor, int scale, RoundingMode roundingMode)`方法,其中`scale`指定结果的小数位数,`roundingMode`指定了舍入策略,以避免无限循环的...

    Java解惑.pdf

    例如,`1.1`在二进制表示中是一个无限循环小数,因此在`double`中只能近似存储。当进行算术运算时,这种近似会导致结果不精确。在本例中,`2.00 - 1.10`的结果不是精确的`0.9`,而是`0.8999999999999999`,这是因为`...

    解决java数值范围以及float与double精度丢失的问题

    例如,十进制数0.1无法用二进制数精确表示,因为它是一个无限循环的小数。在二进制系统中,0.1的表示方式是无限循环的,因此无法用浮点数精确表示。 三、解决float和double类型的精度问题 要解决float和double类型...

    程序中两个Double类型相加出现误差的解决办法

    这种表示方式并不能精确地表示所有十进制小数,特别是那些具有无限循环小数的部分。当两个Double变量相加时,计算机会进行二进制运算,这个过程中可能会引入微小的误差,虽然人眼难以察觉,但在累计多个这样的计算后...

    Java中浮点数精度问题的解决方法

    由于二进制无法精确表示某些十进制小数(比如0.4在二进制下是无限循环的),这就会导致在计算过程中产生微小的误差,这些误差在多次运算后可能会积累,从而影响最终结果的精度。 为了解决这个问题,Java提供了`java...

    计算机精度问题(Double)

    解决精度问题的方法有很多,如使用更高精度的数据类型(如Java中的`BigDecimal`),或者使用特定的算法进行浮点数比较。在进行浮点数计算时,可以设定一个容差值(epsilon),只要两个数的差的绝对值小于这个容差,...

Global site tag (gtag.js) - Google Analytics