【问题标题】:Java Expression Evaluation Error [duplicate]Java 表达式求值错误 [重复]
【发布时间】:2015-01-28 00:57:55
【问题描述】:

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

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

谢谢!

编辑我已经检查过并且“player.get”调用返回值,但是一旦除以乘以之前产生一个小数(如 0.06)。

【问题讨论】:

    标签: java expression evaluation


    【解决方案1】:

    问题出在这里:

    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);
    

    【讨论】:

    • 或者,为了完全避免浮点:1000000l * pos/pTime.
    • 谢谢,对不起,我尝试了这个,但它在 Eclipse 表达式窗口中......不知道那里发生了什么,但同样感谢,并为这个愚蠢的问题感到抱歉。
    【解决方案2】:

    pospTime 转换为double。您在除法上得到整数截断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2014-06-22
      • 2016-02-24
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多