从整数

问题描述:

int velMperMin = 667; 
int distM = 70; 
double movT = (distM/velMperMin)*60; 

movtT的商获得双重价值必须等于6.30,但它是0从整数

您需要将分区的其中一个操作数转换为双精度值。就像这样:

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

你的代码执行整数除法distM/velMperMin和结果0。然后你乘以60.仍然0。然后你转换为双倍,现在它是0.0

将其中一个操作数转换为double可确保该部门将成为浮点部门而不是整数部门,并将产生您期望的结果。

+0

或者他只是可以将它们定义为double。 – 2012-02-01 12:03:12

+1

@Vash也许,但有时你可能有潜在的变量,这些变量自然是整数,但你随后想要用它们执行浮点算术。 – 2012-02-01 12:04:13

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

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

或者只是定义变量为双之一。

由于70/66700 * 60也是0

distM和velMperMin都是整数,并且将它们分成0等于0,因为结果小于1并且将被剪切为整数。用60乘以零仍然是零。

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

您提到的分区在整数类型上执行的问题。

当你除整数,结果你也将有一个整数。在你的情况下,你将70除以667.这给0和10494 ...休息。所以最终的结果是零是我们没有地方来存储小数值。

不要进入int分区,否则会得到int结果。

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

难道你不是指“双”而不是“双”吗? – 2012-02-01 12:38:37

+0

不是。这是一个错误的结论。您可以使用双精度或双精度。事情是:不要指望一个int分割的double(或Double)结果,正如其他SO所说的那样 – Alfabravo 2012-02-01 12:53:00

解决这个问题的最简单方法是首先以double为多。

double movT = 60.0 * distM/velMperMin;