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
,它将安全地提升为 long
或 double
无论如何:
return (int)((double)pos/pTime * 1000000);
将 pos
或 pTime
转换为 double
。您正在对除法进行积分截断。
我正在尝试找出歌曲的当前位置与其总播放时间之间的比率。
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
,它将安全地提升为 long
或 double
无论如何:
return (int)((double)pos/pTime * 1000000);
将 pos
或 pTime
转换为 double
。您正在对除法进行积分截断。