0

我有以下 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);  
  }

}

它设置间隔长度已经过去的时间百分比,用于渲染与间隔百分比相同的圆边界百分比。

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

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

在这些情况下如何获得更高的精度?

4

2 回答 2

1

算术需要作为双精度来完成。您可以按如下方式修改更新功能以获得您想要的结果。特别注意这一行:

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

下面的代码将用于从 long 的变量更改。

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);
}
于 2013-09-03T23:08:54.653 回答
0

System.nanoTime() 应该是您正在寻找的具有纳米时间精度的东西。

于 2013-09-03T22:32:56.637 回答