我的问题:
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!
我有整数,但我想用双精度计算一个我需要的表达式。
有没有一种简单的方法可以做我尝试过的事情?
答案 0 :(得分:2)
您必须将表达式中的一个整数强制转换为double
。实际上,你不能投出任何整数。投射的重要一个是划分的操作数之一,因为整数除法是导致精度损失的原因。)
例如:
double result = (a - (double)b / (c * d) + e);
或
double result = (a - b / (double)(c * d) + e);
这将确保使用浮点运算完成除法。
答案 1 :(得分:1)
为什么java不会自动将int转换为表达式中的双精度?
因为你没有得到小数值的表达式纯粹基于你给它的操作数来评估,而不是更大的上下文(可能可怕复杂)。因此a - b
,c * d
和... + e
都使用int
值。只有在得到最终结果后,才将其转换为double
,并且编译器不会查看更大的上下文并猜测您想要更早地执行此操作(这是一件好事(商标)功能)。
如果您希望使用double
值进行操作,则必须告诉编译器。在这种情况下,您可以将该演员阵容放在几个地方中的任何一个地方,然后这些地方将会“冒出来”。结果用于任何表达式。在这里你可以把它放在一个地方:
double result = (a - b / (double)(c * d) + e);
答案 2 :(得分:0)
int
之间的操作结果为int
。因此,12/10
是整数1
,如果您想获得双倍1.2
,则必须将其中一个表达式转换为double
,如double result = (a - (double)b / (c * d) + e);
}。