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/等不同的计算器中,它们会产生正确的答案。
请帮帮我。
答案 0 :(得分:3)
将一个除法操作数转换为double
,double
类型将在计算中向上传播:
System.out.println(300 + ((160 - 300) / (double)(240 - 20)) * (27 - 20));
进一步阅读
如果二元运算符的至少一个操作数是浮点类型,则操作是浮点运算,即使另一个是整数运算。
答案 1 :(得分:1)
整数值是整数,例如1,2,3,4, etc
。如果您希望结果包含小数点.
,则需要使用double
或float
。
以下代码生成正确的结果:
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隐含地暗示它是双倍的。