Java表达式评估错误

时间:2015-01-28 00:57:56

标签: java expression evaluation

我试图找到歌曲当前位置与其总播放时间之间的比率。 long pTime = player.getCurrentBufferedTimeMcsec(); long pos = player.getCurrentPosition(); return (int)(pos/pTime * 1000000l);

返回表达式计算为零。我怎样才能解决这个问题?我猜它是我使用和连接的类型的混合物,对吧?

谢谢!

编辑我已经检查了" player.get"调用返回值,但一旦分割,在乘以之前产生一个小数(如0.06)。

2 个答案:

答案 0 :(得分:2)

问题在于:

pos/pTime

两个操作数均为long,因此结果为long,这将截断任何小数部分。如果pTime大于pos,则除法的结果(当然也包括最终结果)将为零。

通过将其中一个操作数强制转换为浮点类型来更改代码以允许浮点结果:

return (int)((double)pos/pTime * 1000000l);

当其中一个操作数为double时,结果为double


其他提示:请勿对l常量使用小写long - 它看起来像1。使用大写1000000L,或者在这种情况下完全删除L,因为1000000是有效的int,它将被安全地提升为long或者double无论如何:

    return (int)((double)pos/pTime * 1000000);

答案 1 :(得分:0)

pospTime投射至double。你正在对分裂进行整体截断。