int velMperMin = 667;
int distM = 70;
double movT = (distM/velMperMin)*60;
movtT
必须等于6.30
,但它0
。
答案 0 :(得分:6)
您需要将该分区的一个操作数强制转换为double值。像这样:
double movT = ((double)distM/velMperMin)*60;
您的代码执行整数除法distM/velMperMin
,结果为0
。然后你将它乘以60.仍然是0
。然后你转换为double,现在它是0.0
。
将一个操作数强制转换为double
可确保除法将是浮点除法而不是整数除法,并将产生您期望的结果。
答案 1 :(得分:4)
解决此问题的最简单方法是首先使用double
倍数。
double movT = 60.0 * distM / velMperMin;
答案 2 :(得分:1)
int/int
的结果是int
(70/667 = 0.xxx,即0)。在划分之前,您必须至少将int
投射到double
:
double movT = ((double) distM/velMperMin)*60;
或者只是将其中一个变量定义为double。
答案 3 :(得分:1)
由于70 / 667
为0
,0 * 60
也是0
。
答案 4 :(得分:0)
distM和velMperMin都是整数,并且将它们除以等于0,因为结果小于1并且将被切割为整个int数。将零乘以60仍然为零。
答案 5 :(得分:0)
这是正常的:当使用整数70/667为0时,使用双精度时会产生0,1049。尝试将velMperMin和distM更改为双倍。
答案 6 :(得分:0)
您提到的问题是在整数类型上执行的除法。
当你除以整数时,结果你也会有一个整数。在你的情况下,你将70除以667.这给0和10494 ......休息。所以最终的结果是零是我们没有地方存储小数值。
答案 7 :(得分:0)
不要进入int部门,否则你会得到int结果。
Double velMperMin = new Double(667);
Double distM = new Double(70);
Double movT = ( distM / velMperMin * 60 );