在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 - 要计算最大值