为什么java不会自动将int转换为表达式中的double?

时间:2015-03-30 07:43:17

标签: java casting int double expression

我的问题:

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!

我有整数,但我想用双精度计算一个我需要的表达式。

有没有一种简单的方法可以做我尝试过的事情?

3 个答案:

答案 0 :(得分:2)

您必须将表达式中的一个整数强制转换为double。实际上,你不能投出任何整数。投射的重要一个是划分的操作数之一,因为整数除法是导致精度损失的原因。)

例如:

double result = (a - (double)b / (c * d) + e);

double result = (a - b / (double)(c * d) + e);

这将确保使用浮点运算完成除法。

答案 1 :(得分:1)

  

为什么java不会自动将int转换为表达式中的双精度?

因为你没有得到小数值的表达式纯粹基于你给它的操作数来评估,而不是更大的上下文(可能可怕复杂)。因此a - bc * d... + e都使用int值。只有在得到最终结果后,才将其转换为double,并且编译器不会查看更大的上下文并猜测您想要更早地执行此操作(这是一件好事(商标)功能)。

如果您希望使用double值进行操作,则必须告诉编译器。在这种情况下,您可以将该演员阵容放在几个地方中的任何一个地方,然后这些地方将会“冒出来”。结果用于任何表达式。在这里你可以把它放在一个地方:

double result = (a - b / (double)(c * d) + e);

Live example

答案 2 :(得分:0)

int之间的操作结果为int。因此,12/10是整数1,如果您想获得双倍1.2,则必须将其中一个表达式转换为double,如double result = (a - (double)b / (c * d) + e); }。