Java时间间隔百分比具有更高的精度

时间:2013-09-03 22:20:23

标签: java time overflow long-integer intervals

我有以下Java代码:

public class Time {

  private Main m;
  private long st;
  private long et;

  public Time(Main m, long g){
    this.m = m;
    st = System.currentTimeMillis();
    et = st+g;
  }

  public void update() {
    long now = System.currentTimeMillis();
    float per;
    if (st >= et || now >= et) {
      m.setPer(100);
      return;
    }
    if (now <= st) {
      m.setPer(000);
      return;
    }
    per = (now - st) * 100 / (et - st);
    System.out.println(per);
    m.setPer(per);  
  }

}

设置超出间隔长度的时间百分比,用于渲染圆圈边界的百分比与间隔的百分比相同。

我的问题是我需要比长类型借出的更高的精度,因为它是跳跃的。

当我将变量转换为float或double时,它会溢出。

在这种情况下,如何才能获得更高的精确度?

2 个答案:

答案 0 :(得分:1)

算术需要以双倍的方式完成。您可以修改更新功能 如下获得你所追求的结果。 特别注意这一行:

per = (now - st) * 100.0 / (et - st);

下面的代码会更改longs中使用的变量。

public void update() {
  double now = (double)System.currentTimeMillis();
  double per;
  if (st >= et || now >= et) {
System.out.println ("st: " + st + ", et: " + et);
System.out.println(100);
    return;
  }
  if (now <= st) {
System.out.println(000);
    return;
  }
  per = (now - st) * 100.0 / (et - st);
  System.out.println(per);
}

答案 1 :(得分:0)

System.nanoTime()应该是您正在寻找的纳米级精度。