-
怎么解决BigDecimal里面无限循环小数的问题啊?5
Non-terminating decimal expansion; no exact representable decimal result.
2012年3月11日 13:12
4个答案 按时间排序 按投票排序
-
通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛这个异常。
解决之道:就是给divide设置精确的小数点divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN);2012年3月12日 14:46
-
引用
//设置舍入:
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
-
你是不是做除法?
divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
你需要指定精度:scale, 舍入模式:roundingMode
参照:
http://zhangyeny.iteye.com/blog/11705952012年3月11日 15:43
相关推荐
4. **除法**: 使用 `divide()` 方法,需要注意的是除法可能产生无限循环小数,因此通常需要指定舍入模式和小数点后的保留位数。 #### 四、示例代码解析 根据提供的代码示例,我们可以更详细地了解如何在实际应用中...
分割除法时需注意,由于可能会出现无限循环小数,`divide()`方法需要指定舍入模式,例如`RoundingMode.HALF_UP`表示四舍五入。 BigDecimal还提供了比较操作,如`compareTo()`方法,用于比较两个BigDecimal值的大小...
需要注意的是,除法运算可能会出现无限循环的小数,为了避免这种情况,可以使用 scale 参数指定小数点后的精度。 7. 四舍五入:在进行除法运算时,可以使用 ROUND_HALF_UP 参数指定四舍五入的方式,以避免精度损失...
3. **舍入模式**:在进行除法运算时,可能会出现无限循环的小数。`divide()`方法可以接受一个`RoundingMode`参数来指定如何处理这种情况。例如,`RoundingMode.HALF_UP`会四舍五入到最接近的整数。 4. **比较操作**...
需要注意的是,BigDecimal的除法操作可能会抛出`ArithmeticException`,因为除不尽时默认不允许无限循环小数。因此,通常需要指定一个精度(scale)和舍入模式(RoundingMode),以控制结果的精度和处理除不尽的情况...
2. **除不尽的无限循环小数**:在数学中,有些除法会产生无限循环小数。在编程中,如果处理不当,这可能导致程序陷入无限循环或者结果不准确。 3. **舍入误差**:当计算结果需要被四舍五入时,选择何种舍入策略(如...
在除法运算中,我们通常需要指定一个`scale`(保留的小数位数)以及`RoundingMode`(舍入模式),以处理可能出现的无限循环小数。这里使用了`HALF_UP`模式,即四舍五入。 为了方便使用,可以封装这些方法在一个工具...
no exact representable decimal result." 提示我们,当前的除法运算会导致无限循环的小数部分,Java无法为这样的结果找到一个精确的`BigDecimal`表示。为了解决这个问题,我们需要在调用`divide`方法时指定商的...
如果`BigDecimal`的标度过大,可能会导致无限循环小数,这在某些计算中可能不是预期的行为。在使用`stripTrailingZeros()`方法移除尾随零后,可能需要检查标度以避免这种情况。 7. **效率优化**: 可以通过`add`,...
对于无限循环小数精确到小数点后10位,可能需要自定义数据类型或使用BigDecimal类来实现高精度计算。 6. **用户交互**:计算器的界面需要响应用户的输入,如点击数字按钮、运算符按钮,以及显示结果。这涉及到了...
不指定舍入模式直接调用divide可能导致ArithmeticException异常,因为默认情况下,无限循环小数是不被接受的。 - 在进行加、减、乘运算时,如果操作数中包含null或空字符串,应该将其转换为0后再进行计算。这是为了...
例如,`0.1`这个简单的十进制数,在二进制下实际上是无限循环的小数,因此在计算机中只能近似存储。 #### 问题实例 在给定的代码示例中,可以看到几个简单的计算操作: ```java public class Test { public ...
例如,0.1在二进制中是无限循环的,导致在计算机内存中无法完全精确表示,从而在进行计算时引入误差。 浮点数的不精确性主要体现在以下场景: 1. 相加和相减:即使两个看似相等的浮点数(如0.1 + 0.2)在JavaScript...
对于除法操作,由于可能存在除不尽的情况,可以使用`divide(BigDecimal divisor, int scale, RoundingMode roundingMode)`方法,其中`scale`指定结果的小数位数,`roundingMode`指定了舍入策略,以避免无限循环的...
例如,`1.1`在二进制表示中是一个无限循环小数,因此在`double`中只能近似存储。当进行算术运算时,这种近似会导致结果不精确。在本例中,`2.00 - 1.10`的结果不是精确的`0.9`,而是`0.8999999999999999`,这是因为`...
例如,十进制数0.1无法用二进制数精确表示,因为它是一个无限循环的小数。在二进制系统中,0.1的表示方式是无限循环的,因此无法用浮点数精确表示。 三、解决float和double类型的精度问题 要解决float和double类型...
这种表示方式并不能精确地表示所有十进制小数,特别是那些具有无限循环小数的部分。当两个Double变量相加时,计算机会进行二进制运算,这个过程中可能会引入微小的误差,虽然人眼难以察觉,但在累计多个这样的计算后...
由于二进制无法精确表示某些十进制小数(比如0.4在二进制下是无限循环的),这就会导致在计算过程中产生微小的误差,这些误差在多次运算后可能会积累,从而影响最终结果的精度。 为了解决这个问题,Java提供了`java...
解决精度问题的方法有很多,如使用更高精度的数据类型(如Java中的`BigDecimal`),或者使用特定的算法进行浮点数比较。在进行浮点数计算时,可以设定一个容差值(epsilon),只要两个数的差的绝对值小于这个容差,...