gpt4 book ai didi

java - 处理对 text() 表现得很奇怪

转载 作者:行者123 更新时间:2023-11-30 10:53:33 25 4
gpt4 key购买 nike

我试图编写一个程序来倒计时到明年的秒/分钟,但我已经遇到了一些非常奇怪的事情,我无法弄清楚它在做什么。这是我的代码:

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

文本根本不会改变,我不明白为什么。

最佳答案

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);

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

关于java - 处理对 text() 表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33946617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com