我的java数学有问题。我有以下表达:
double tripp = (timeNow-previousTime)/(seconds*Sys.getTimerResolution())*trip;
我正在尝试计算我的立方体的旋转速度。这是我在这里执行该函数的完整代码:
public float getTripLenghtToGo(int seconds, double trip) {
long timeNow = Sys.getTime();
System.out.println("RES: "+Sys.getTimerResolution());
double tripp = (timeNow-previousTime)/(seconds*Sys.getTimerResolution())*trip;
System.out.println("("+timeNow+"-"+previousTime+")/("+seconds+"*"+Sys.getTimerResolution()+")*"+trip+" = "+tripp);
if(tripp != 0){
previousTime = timeNow;
}
return (float)tripp;
}
我使用OpenGL所以必须返回float。它返回float,但始终为零。
答案 0 :(得分:2)
timeNow
是long
类型。你师的“上部”部分给了很长时间。整个部门将给予很长时间。您需要将其强制转换为double,否则小数部分将丢失。
例如,输出:
long timeNow = 10;
long previousTime = 1;
double trip = 0.1d;
int seconds = 50;
double trippCast = ((double) (timeNow-previousTime))/((double)seconds)*trip;
System.out.println(trippCast);
double trippWithoutCast = (timeNow-previousTime)/seconds*trip;
System.out.println(trippWithoutCast);
是:
0.018
0.0
答案 1 :(得分:0)
两种可能性:
System.nanoTime()
- 它可以为您提供更精确的时间测量((double)(timeNow-previousTime))/(seconds*Sys.getTimerResolution())
- 如果用long除以long,结果将很长。这是0L