当前位置: 首页 > 面试题库 >

BigDecimal错误

段干昊然
2023-03-14
问题内容

在Java中,我将k定义为 double k=0.0;

我从数据库中获取数据并使用while循环添加相同的数据

while(rst.next()) {
k = k + Double.parseDouble(rst.getString(5));
}

NOTE: In database, I have values as 125.23, 458.45, 665.99 (all two decimals)

当我显示k时,我得到的价值为

k = 6034.299999999992

因此,我BigDecimal在下面介绍了并将代码更改为

      BigDecimal bd = new BigDecimal(k);
      bd = bd.setScale(2,BigDecimal.ROUND_UP);

现在我得到新的总数,因为bd=6034.30这是正确的。

问题1

好吧,问题是当我在其他地方使用它时,下面是我得到的

 k  = 157.3
 bd = 157.31

它应该显示bd=157.30为手动添加后得到157.30

它显示为的任何原因157.31

问题2

还有k为什么显示这么多十进制值的原因吗?以下是我为双变量k获得的不同值

157.3
67.09
1014.6000000000003
229.06999999999996

我不明白有时它显示一个小数,有时它显示2个小数,大多数时候它显示14个小数。

任何建议,将不胜感激。


问题答案:

您仍在 通过 double。坚持BigDecimal 到处

BigDecimal k = BigDecimal.ZERO;
while (rst.next()) {
    k = k.add(new BigDecimal(rst.getString(5));
}

或者-最好是,如果数据库中的字段实际上是一个十进制值:

BigDecimal k = BigDecimal.ZERO;
while (rst.next()) {
    k = k.add(rst.getBigDecimal(5));
}


 类似资料:
  • 问题内容: 我试图从一个字符串做一个BigDecimal。不要问我为什么,我只需要它!这是我的代码: 这是我得到的输出? 有任何想法吗? 问题答案: 创建双精度数时,值0.3不能精确表示。您可以从不带中间双精度字的字符串创建BigDecimal,如下所示: 浮点数表示为二进制分数和指数。因此,有些数字无法准确表示。在以10为基数的数字中有一个类似的问题,例如1/3,即0.333333333 ...

  • 描述 (Description) java.math.BigDecimal.subtract(BigDecimal subtrahend)返回一个BigDecimal,其值为(this - subtrahend),其标度为max(this.scale(),subtrahend.scale())。 声明 (Declaration) 以下是java.math.BigDecimal.subtract()

  • 描述 (Description) java.math.BigDecimal.remainder(BigDecimal divisor)方法返回一个BigDecimal,其值为(this%divisor)。 余数由this.subtract(this.divideToIntegralValue(divisor).multiply(divisor))给出。 这不是模运算,即结果可能是负的。 声明 (D

  • 描述 (Description) java.math.BigDecimal.multiply(BigDecimal multiplicand)返回一个BigDecimal,其值为(this×multiplicand),其标度为(this.scale()+ multiplicand.scale())。 声明 (Declaration) 以下是java.math.BigDecimal.multiply

  • 描述 (Description) java.math.BigDecimal.min(BigDecimal val)返回此BigDecimal和val的最小值。 声明 (Declaration) 以下是java.math.BigDecimal.min()方法的声明。 public BigDecimal min(BigDecimal val) 参数 (Parameters) val - 要计算最大值

  • 描述 (Description) java.math.BigDecimal.max(BigDecimal val)返回此BigDecimal和val的最大值。 声明 (Declaration) 以下是java.math.BigDecimal.max()方法的声明。 public BigDecimal max(BigDecimal val) 参数 (Parameters) val - 要计算最大值