2010-08-05 31 views
1

我必须做的整数操作,非常简单:操作:结果只有零 - Java的

A = B/C * d

,所有的变量都是整数,但结果ZERO无论参数的值是多少。我想这对于这种类型的数据(int)的操作是个问题。

我解决了首先在float中转换然后以整数转换的问题,但我想知道是否有更好的方法。

回答

2

/运算符与整数一起使用时,会进行整数除法,我怀疑这不是您想要的。特别是,2/5是零。

正如您所说,解决此问题的方法是将一个或多个操作数强制转换为一个float,然后使用Math.floor,Math.roundMath.ceil将得到的浮点值转回为整数。这不是一个不错的解决方案;你有一堆整数,但你真的想要一个浮点计算。输出可能不是一个整数,所以您可以指定要如何将其转换回来。

更重要的是,我不知道任何语法要做到这一点,这将是比(例如)更简明易读的:

a = Math.round((float)b/c * d) 
+0

ok了,其他的解决方案(第一moltiplication,然后除以)的作品的时候,但是你让我相信在这些案件中有没有“坏”转换为浮点数 – andystrath 2010-08-05 09:25:00

0

在这种情况下,你可以重新排列表达这样分工最后执行:

a = (b*d)/c 

要谨慎,b*d永远不会大到足以溢出int。如果可能,你可以投其中一人long

a = (int)(((long)b*d)/c) 
+0

如果您要继续施放,为什么不投入浮点数以获得浮点数除法*和*具有指定如何将非整数值转换回int的豪华性? – 2010-08-05 08:52:48

+1

由于浮点计算速度较慢,并且它们在较大值时失去精度。 – 2010-08-05 09:45:19