【发布时间】:2014-01-28 14:20:46
【问题描述】:
所以我将应用程序中的一个错误缩小到 java 搞乱了一个简单的减法计算。我无法弄清楚为什么。这是一段代码:
for (double x = (((double)bdl.length())-1)/10; x > 0; x--) {
int count;
System.out.println("x = " + x);
if (x >= 1) {
System.out.println("X = " + x + " so count = 20");
count = (20);
} else {
count = (int)(x*20);
System.out.println("X = " + x + " so count = "+count);
}
}
变量 bdl 只是一个 JSONArray,我现在只关心它的长度。由于 bdl 最初的长度为 15,因此 x 将等于 1.4 。第一次通过循环时,第一个 println 说“X = 1.4 所以 count = 20”,这是正确的。然而,当 x 应该 = 0.4 时,第二次显示“X = 0.3999999999999999 所以 count = 7”。我知道在那个时候将 (x*20) 转换为 int 会给我 7,但我的问题是为什么 x 不等于 0.4 。
【问题讨论】:
-
在指责 Java 之前,你应该知道正确的类型是什么。
-
这是由于浮点运算。如果它困扰您或只是截断,您可以尝试将答案四舍五入到一定数量的小数点。