Java 从整数的商中得到双值

Java 从整数的商中得到双值,java,Java,movtT必须等于6.30,但它是0您需要将除法的一个操作数强制转换为双值。像这样: int velMperMin = 667; int distM = 70; double movT = (distM/velMperMin)*60; 您的代码执行整数除法distM/velMperMin,结果是0。然后乘以60。仍然0。然后转换为double,现在是0.0 将其中一个操作数强制转换为double可确保除法是浮点除法而不是整数除法,并将产生预期的结果。int/int的结果是int(70/667=

movtT
必须等于
6.30
,但它是
0

您需要将除法的一个操作数强制转换为双值。像这样:

int velMperMin = 667;
int distM = 70;
double movT = (distM/velMperMin)*60;
您的代码执行整数除法
distM/velMperMin
,结果是
0
。然后乘以60。仍然
0
。然后转换为double,现在是
0.0


将其中一个操作数强制转换为double可确保除法是浮点除法而不是整数除法,并将产生预期的结果。

int/int的结果是
int
(70/667=0.xxx,即0)。在分割之前,必须将至少一个
int
转换为
double

double movT = ((double)distM/velMperMin)*60;

或者将其中一个变量定义为double。

因为
70/667
0
0*60
也是
0

distM和velMperMin都是整数,并且除以它们等于0,因为结果小于1,将被切割为整数。将0与60相乘仍然是0。

这是正常的:当使用整数时,70/667是0,当使用双精度时,它将导致01049。尝试将velMperMin和distM更改为double。

您遇到的问题是对整数类型执行除法


当你们除以整数时,结果也是一个整数。在你的例子中,你用70除以667。这给出了0和10494。。。休息最后的结果是零,因为我们没有存储十进制值的地方

不要进入整数除法,否则会得到整数结果

double movT = ((double) distM/velMperMin)*60;

最简单的方法是通过
double
首先将其修复为多个

Double velMperMin = new Double(667);
Double distM = new Double(70);
Double movT = ( distM / velMperMin * 60 );

或者他可以把它们定义为双精度。@Vash可能,但有时你可能有一些本质上是整数的基础变量,但你想用它们执行浮点运算。你是说双精度而不是双精度吗?不。这是一个错误的结论。可以使用原语double或double。问题是:不要期望int除法得到双精度(或双精度)结果,正如其他人所说的那样
double movT = 60.0 * distM / velMperMin;