Java 表达式求值错误

标签 java expression evaluation

我正在尝试找到歌曲当前位置与其总播放时间之间的比率。 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 ,无论如何都会安全地提升为 longdouble:

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

关于Java 表达式求值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28182898/

相关文章:

java - for 方法中的索引不增加

Java 线程无法与链表正常工作

c# - 是否立即调用 "=>"表达式?

java - 如何进行n重交叉验证(Mahout)?

asp.net - 使用 Virtual PC 评估 IIS7?

java - 如何在没有密码编码的情况下使用Spring Security?

java - System.getProperty ("plugins.dir")返回 null

c - 为什么在 C 中 const 对象不是编译时常量表达式?

algorithm - 最大化算术表达式