为什么我的双打数学出错了?

时间:2011-04-28 01:44:16

标签: java math double

这就是我创建q的方式

Double q = ((r * (i/5)) + y);

此时其他变量的值为

r = 3.470694142992069E-5
i = 1
y = -116.30237535361584

但是

q = -116.30237535361584

这个数学有问题吗? (Java)

q should be -116.30236841222755

6 个答案:

答案 0 :(得分:6)

i和5都是整数,因此(i / 5)部分求值为整数(0)。这反过来乘以r,所以你只剩下y的值。

答案 1 :(得分:5)

尝试

Double q = ((r * ((double)i/5)) + y);

这是完整的代码。

class Main
{
        public static void main (String[] args) throws java.lang.Exception
        {
                double r = 3.470694142992069E-5;
                int i = 1;
                double y = -116.30237535361584;
                Double q = ((r * ((double)i/5)) + y);
                System.out.println(q);

        }
}
  

输出:   -116.30236841222755

答案 2 :(得分:2)

如果i是一个整数(似乎就是这种情况),那么i/5表达式将执行整数运算,结果为零。

答案 3 :(得分:1)

i不是双倍的。整数分区。任何时候0都是0.

答案 4 :(得分:1)

也许你可以试试

Double q = ((r * i/5.0) + y);

答案 5 :(得分:0)

浮点值非常不精确。你所展示的差异可以用于双算术。如果您确实需要额外的精度,jquantity是一个用于精确数学的开源Java库。