从整数
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
可确保该部门将成为浮点部门而不是整数部门,并将产生您期望的结果。
int/int
的结果是int
(70/667 = 0.xxx,它是0)。你必须将前至少一个int
转换为double
:
double movT = ((double) distM/velMperMin)*60;
或者只是定义变量为双之一。
由于70/667
是0
,0 * 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);
难道你不是指“双”而不是“双”吗? – 2012-02-01 12:38:37
不是。这是一个错误的结论。您可以使用双精度或双精度。事情是:不要指望一个int分割的double(或Double)结果,正如其他SO所说的那样 – Alfabravo 2012-02-01 12:53:00
解决这个问题的最简单方法是首先以double
为多。
double movT = 60.0 * distM/velMperMin;
或者他只是可以将它们定义为double。 – 2012-02-01 12:03:12
@Vash也许,但有时你可能有潜在的变量,这些变量自然是整数,但你随后想要用它们执行浮点算术。 – 2012-02-01 12:04:13