java用浮点数和双打计算

时间:2013-04-06 17:03:59

标签: java math opengl lwjgl

我的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,但始终为零。

2 个答案:

答案 0 :(得分:2)

timeNowlong类型。你师的“上部”部分给了很长时间。整个部门将给予很长时间。您需要将其强制转换为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