我有以下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时,它会溢出。
在这种情况下,如何才能获得更高的精确度?
答案 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()应该是您正在寻找的纳米级精度。