从整数商中获取双精度值

时间:2012-02-01 11:59:48

标签: java

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

movtT必须等于6.30,但它0

8 个答案:

答案 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 / 66700 * 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 );