为什么 java 不自动将表达式中的 int 转换为 double?
Why does not java cast int to double in expression automatically?
我的问题:
int a = 30, b = 12, c = 2, d = 5, e = 1;
double result = (double) (a - b / (c * d) + e);
System.out.print("Result = " + (double) result + " - " + result);
结果:
Result = 30.0 - 30.0
我要看的是:29.8!
我有整数,但我想计算一个我需要双精度的表达式。
有没有一种简单的方法可以完成我尝试过的操作?
您必须将表达式中的整数之一转换为 double
。实际上,您不能转换任何整数。要转换的重要一个是除法的操作数之一,因为整数除法是您遇到的精度损失的原因)。
例如:
double result = (a - (double)b / (c * d) + e);
或
double result = (a - b / (double)(c * d) + e);
这将确保使用浮点运算完成除法。
why does not java cast int to double in expression automatically?
因为你没有得到分数值的表达式是纯粹根据你给它的操作数计算的,而不是更大的上下文(这将 可怕地 复杂)。所以 a - b
、c * d
和 ... + e
都适用于 int
值。只有在获得最终结果后,您才会将其转换为 double
,并且编译器不会查看更大的上下文并猜测您想要早点这样做(这是一件好事 ( tm)).
如果您希望使用 double
值进行操作,您必须告诉编译器。在这种情况下,您可以将该转换放在多个位置中的任何一个,然后 "bubble up" 到使用结果的任何表达式。您可以将其放在一个位置:
double result = (a - b / (double)(c * d) + e);
int
之间的运算结果为int
。所以 12/10
是 int one 1
,如果你想得到 double one 1.2
,你必须将其中一个表达式转换为 double
,比如 double result = (a - (double)b / (c * d) + e);
.
我的问题:
int a = 30, b = 12, c = 2, d = 5, e = 1;
double result = (double) (a - b / (c * d) + e);
System.out.print("Result = " + (double) result + " - " + result);
结果:
Result = 30.0 - 30.0
我要看的是:29.8!
我有整数,但我想计算一个我需要双精度的表达式。
有没有一种简单的方法可以完成我尝试过的操作?
您必须将表达式中的整数之一转换为 double
。实际上,您不能转换任何整数。要转换的重要一个是除法的操作数之一,因为整数除法是您遇到的精度损失的原因)。
例如:
double result = (a - (double)b / (c * d) + e);
或
double result = (a - b / (double)(c * d) + e);
这将确保使用浮点运算完成除法。
why does not java cast int to double in expression automatically?
因为你没有得到分数值的表达式是纯粹根据你给它的操作数计算的,而不是更大的上下文(这将 可怕地 复杂)。所以 a - b
、c * d
和 ... + e
都适用于 int
值。只有在获得最终结果后,您才会将其转换为 double
,并且编译器不会查看更大的上下文并猜测您想要早点这样做(这是一件好事 ( tm)).
如果您希望使用 double
值进行操作,您必须告诉编译器。在这种情况下,您可以将该转换放在多个位置中的任何一个,然后 "bubble up" 到使用结果的任何表达式。您可以将其放在一个位置:
double result = (a - b / (double)(c * d) + e);
int
之间的运算结果为int
。所以 12/10
是 int one 1
,如果你想得到 double one 1.2
,你必须将其中一个表达式转换为 double
,比如 double result = (a - (double)b / (c * d) + e);
.