Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 简单方程式计算结果与预期不符 System.out.println(300+((160-300)/(240-20))*(27-20)); //应打印295.5,但打印300 系统输出println(300+((160-300)/(240-20))*(26-20)); //应打印296.1,但打印300_Java - Fatal编程技术网

Java 简单方程式计算结果与预期不符 System.out.println(300+((160-300)/(240-20))*(27-20)); //应打印295.5,但打印300 系统输出println(300+((160-300)/(240-20))*(26-20)); //应打印296.1,但打印300

Java 简单方程式计算结果与预期不符 System.out.println(300+((160-300)/(240-20))*(27-20)); //应打印295.5,但打印300 系统输出println(300+((160-300)/(240-20))*(26-20)); //应打印296.1,但打印300,java,Java,我似乎不知道这个简单的方程式出了什么问题。我试着将变量存储在整数、双倍、和浮动中,然后打印出来,结果仍然是300 我已经把这个方程式放进了不同的计算器,比如谷歌和谷歌,它们会给出正确的答案 请帮帮我。将一个除法操作数强制转换为double,并且double类型将通过计算向上传播: System.out.println(300 + ((160 - 300) / (double)(240 - 20)) * (27 - 20)); 进一步阅读 -这来自Java语言规范。枯燥但非常准确的信息(非常

我似乎不知道这个简单的方程式出了什么问题。我试着将变量存储在整数双倍、和浮动中,然后打印出来,结果仍然是300

我已经把这个方程式放进了不同的计算器,比如谷歌和谷歌,它们会给出正确的答案


请帮帮我。

将一个除法操作数强制转换为
double
,并且
double
类型将通过计算向上传播:

System.out.println(300 + ((160 - 300) / (double)(240 - 20)) * (27 - 20));
进一步阅读

  • -这来自Java语言规范。枯燥但非常准确的信息(非常有用)。问题的核心是:
如果二进制运算符的操作数中至少有一个是浮点类型的,则该运算是浮点运算,即使另一个是整数


尝试在计算中不要只使用整数值,您将得到正确的答案:)

尝试以下方法

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

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

这是因为所有数字都是整数,表达式计算为整数,
(-140/220)
计算为
0
,因此值
300

将除法键入双精度,如下所示:

((160-300)/(双人)(240-20))*(26-20)

或者简单地用小数点表示任何数字,这将强制将整个表达式向上转换并作为浮点计算


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

你可以使用这个公式,得出295.5456

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

您还可以稍微了解一下Java是如何计算表达式和类型强制的。

整数值是一个整数,例如
1,2,3,4等
。如果希望结果包含小数点
,则需要使用
双精度
浮点值

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

 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)); 
    }

整数方程只输出整数答案

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

在这种情况下,按照paislee的建议使用铸造,或使用以下示例:

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

把一个x.0隐式地表示它是一个double。

你真的认为这是Java的问题吗?我打赌这与你只使用整数来表示浮点结果有更大的关系。专业提示:当你对某些技术不熟悉时,99.99999999999999999%的时候,你认为是一个明显的bug,实际上是你的错误期望。我说的是from经验。@bernie Truth。我个人对bug的定义是“你没有预料到的东西”。我3年前13岁时开始使用Java,所以我并不完全是“新手”。然而,在PHP中,它会在必要时自动将int转换为float,所以我认为Java也会这样做。我的错误。@bernie:Pro提示:当你多年来一直在使用一种技术时,99.9%的时间你认为是一个明显的错误,但实际上你的期望仍然是错误的:)非常感谢。为什么它的行为方式需要您明确地将其定义为double?因为“(240-20)”是整数值,“(160-300)”也是整数。默认情况下,所有数字的类型都是
int
。不能用
int
表示十进制值,Java也不会自动为您更改结果类型。例如,
1/3
等于
0
。将在答案中添加阅读链接。@JRunner添加了一些链接。希望第二个能回答很多问题。@paislee谢谢你的链接。详细的解释。非常感谢。