处理与text()表现奇怪

时间:2015-11-26 20:36:25

标签: java processing

我正在尝试编写一个程序来计算直到明年的秒/分钟,但我已经发现了一些非常奇怪的东西,我无法弄清楚它在做什么。这是我的代码:

import java.util.Calendar;
import java.util.GregorianCalendar;

Calendar currentTime;
Calendar newYear;
int nextYear;

void setup() {
    size(500, 250);
    frameRate(60);
}

void draw() {
    background(255, 0, 0);
    currentTime = Calendar.getInstance();
    nextYear = currentTime.get(Calendar.YEAR) + 1;
    newYear = new GregorianCalendar(nextYear, 1, 1, 0, 0, 0);
    textAlign(CENTER, CENTER);
    fill(0);
    textSize(20);
    long timeInMillis = currentTime.getTimeInMillis(); //I added this to try to fix it.
    System.out.println(timeInMillis); //Used to be System.out.println(currentTime.getTimeInMillis())
    text(timeInMillis, width/2, height/2); //Used to be text(currentTime.getTimeInMillis(), width/2, height/2)
}

我甚至尝试在当前的毫秒时间内创建一个实际的局部变量,但它没有做任何事情。问题在于:尽管我将相同的内容放入System.out.println()text(),但窗口中显示的数字始终保持不变。它也将其格式化为十进制,即使它是一个很长的值。当我运行程序时,文本是:

1448569995264.000

然而,输出的(最后五行)是:

1448570028853
1448570028869
1448570028886
1448570028903
1448570028919

文字根本不会改变,我无法弄清楚原因。

1 个答案:

答案 0 :(得分:1)

text()函数不是为处理long变量而设计的。它仅用于处理Stringintfloat个变量。因此,text()功能会将您的long视为float。这就是你获得小数位的原因。

这也是为什么数字不能改变 - float值只能处理一定数量的有效数字,因此它们会失去准确性,因为它们具有非常大的值,例如您所使用的值。重新使用。作为旁注,这个问题也可能导致像这样的奇怪案例:

float x = 123456789;
println(x == x+1); //prints true!

解决方案是不将long值与处理函数混合。如果您需要创建String值以传递到text()函数,请手动执行此操作。最简单的方法可能是String.valueOf()函数:

text(String.valueOf(timeInMillis), width/2, height/2);

还有其他功能可用于更具体的格式化,但这将为您提供基础知识。