我正在尝试找到歌曲当前位置与其总播放时间之间的比率。
long pTime = player.getCurrentBufferedTimeMcsec();
long pos = player.getCurrentPosition();
return (int)(pos/pTime * 1000000l);
返回表达式的计算结果为零。我怎样才能解决这个问题?我猜这是我使用的类型和串联的混合,对吗?
谢谢!
编辑我已经检查过,“player.get”调用返回值,但除法后在相乘之前会产生小数(例如 0.06)。
最佳答案
问题出在这里:
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);
关于Java 表达式求值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28182898/