Java 表达式求值错误

Java Expression Evaluation Error

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

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

谢谢!

Edit 我已经检查过并且 "player.get" 调用了 return 值,但是一旦相除就会在相乘之前产生一个小数(比如 0.06)。

问题出在这里:

pos/pTime

两个操作数都是long,所以结果是long,这将截断任何小数部分。如果 pTime 大于 pos,除法的结果(当然还有最终结果)将为零。

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

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

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


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

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

pospTime 转换为 double。您正在对除法进行积分截断。