5

好的。我已经把头撞到墙上了大约 2 个小时,试图弄清楚为什么世界double answer = 364/365;上告诉我那answer是 0。或者任何其他的组合double,它只是截断小数,我只是不知道为什么。

4

5 回答 5

9

364/365 执行整数除法(截断小数)。

尝试double answer = 364.0/365;强制它执行浮点除法。

就像是:

double days_in_year = 365;
double answer = 364/days_in_year;

也可以,因为其中一个操作数不是整数。

于 2010-02-16T05:02:33.260 回答
6

您正在使用一个 int 类型 (364) 并除以另一个 int 类型 (365) - 答案将是一个 int。然后将其存储在双类型答案中。您可以执行以下操作:

double answer = 364d / 365d;

更多信息在这里:

http://mindprod.com/jgloss/division.html

于 2010-02-16T05:03:58.697 回答
2

你需要做双除法。现在 Java 将其解释为整数除法并返回 truncated int

你需要的是:

double answer = 364 / 365.0;

或者

double answer = 364 / (double) 365; 
于 2010-02-16T05:02:45.967 回答
0

原因是 java 中整数文字的默认类型是int,所有int基于算术的所有结果都被类型转换回int. 因此,虽然你的答案是 0.997,但当它被类型转换回来时,它变成了 0:

(int)0.997  = 0

所以你可以这样做:

364.0/365.0

或者

((float)364)/365
于 2010-02-16T05:06:22.580 回答
0

以上所有答案都是正确的,只是想补充一点,这都是关于 GIGO 的。

double answer = 364/365;

在上面的代码中,双精度类型意味着只回答变量,而算术表达式有两个 int 类型的操作数。所以算术表达式的输出也是 int 类型,然后通过自动向上转换为 double 类型给出输出 0.0,就像下面的例子:

double ans = 4.0/0;

上面的代码将输出 Infinity 作为操作数之一是浮点数,因此通过自动类型转换 0 转换为 0.0 并且结果是根据浮点数据类型。

然而

double ans = 4/0;

将在运行时给出 java.lang.ArithmeticException: / 零异常,因为两个操作数都是 int 数据类型,因此无论 ans 变量数据类型是否为 double,输出都是根据 Integer 数据类型。

于 2019-06-29T03:53:24.040 回答