简单的等式不按预期计算

时间:2012-03-16 17:57:56

标签: java

System.out.println(300 + ((160 - 300) / (240 - 20)) * (27 - 20));
//Should print 295.5 but prints 300

System.out.println(300 + ((160 - 300) / (240 - 20)) * (26 - 20));
//Should print 296.1 but prints 300

我似乎无法弄清楚这个简单的等式出了什么问题。我已经尝试将变量存储在整数双重浮动然后将其打印出来,我仍然可以获得300。

我已将等式放入Google和http://web2.0calc.com/等不同的计算器中,它们会产生正确的答案。

请帮帮我。

7 个答案:

答案 0 :(得分:3)

将一个除法操作数转换为doubledouble类型将在计算中向上传播:

System.out.println(300 + ((160 - 300) / (double)(240 - 20)) * (27 - 20));

进一步阅读

  

如果二元运算符的至少一个操作数是浮点类型,则操作是浮点运算,即使另一个是整数运算。

答案 1 :(得分:1)

整数值是整数,例如1,2,3,4, etc。如果您希望结果包含小数点.,则需要使用doublefloat

以下代码生成正确的结果:

 public static void main(String[] args)
    {
      System.out.println(300 + ((160 - 300) / (double)(240 - 20)) * (27 - 20)); 
      System.out.println(300 + ((160 - 300) / (double)(240 - 20)) * (26 - 20)); 
    }

答案 2 :(得分:0)

尽量不要在计算中仅使用整数值,您将收到正确答案:)

答案 3 :(得分:0)

尝试以下

System.out.println(300 +((double)(160 - 300) / (double)(240 - 20)) * (27 - 20));

System.out.println(300 + ((double)(160 - 300) / (double)(240 - 20)) * (26 - 20));

需要在分割之前进行加倍,否则在上述情况下返回的值为0

答案 4 :(得分:0)

((160 - 300) / (240 - 20)) * (26 - 20) = ((-140/220) * (26 - 20)) = (0 * 6) = 0

这是因为所有数字都是整数,表达式被评估为整数,(-140/220)计算结果为0,因此没有任何内容添加到值300

double的分区类似于:

((160 - 300) / (double)(240 - 20)) * (26 - 20)

或简单地表示任何带小数点的数字,这将强制整个表达式被上升并作为浮点进行评估。

((160 - 300) / (240 - 20.0) * (26 - 20)

答案 5 :(得分:0)

您可以使用给出295.54545454545456

的公式
System.out.println(300 + ((160d - 300) / (240 - 20)) * (27 - 20));

您可能还会了解Java如何计算表达式并输入强制类型。

答案 6 :(得分:0)

整数方程只输出整数答案。

例如,1 / 2 = 0的余数为1

在这种情况下,请使用cast作为paislee建议,或使用以下示例:

System.out.println(300 + ((160 - 300) / (240.0 - 20)) * (27 - 20));

把x.0隐含地暗示它是双倍的。