我从很久以前开始学习处理,我遇到了一个问题;当将199.999减去200 时,我希望结果为2位小数(因此结果应为1舍入)。没有格式化结果是0.999995。
格式化为2位小数字符串的代码:
float money = 199.999;
int munten = 200;
String calc1 = nf(money/munten,0,2);
println(calc1);
float calc2 = float(calc1);
println(calc2);
打印:
1,0
NaN
我认为float()不会工作,因为String中有一个逗号而不是一个点,我不确定是否很难。但是如何将一个数字舍入到2位小数并仍然让它成为一个浮点数呢?
感谢您花时间阅读本文,
答案 0 :(得分:0)
当我在Processing 3.3.6 / macOS 10.12(US)上运行你的例子时,我得到“1.00”和“1.0”。这可能是由于您的数字格式设置创建了nf()
无法正确读取的输出字符串。
float money;
int munten;
String s;
float f;
money = 199.999;
munten = 200;
s = nf(money/munten, 0, 2);
println(s); // "1.00" -- or "1,0" etc. in different os language locales
f = float(s);
println(f); // "1.0" -- or NaN error if above is not 1.0 format
f = money/munten;
println(f); // 0.999995
s = nf(f, 0, 2);
println(s); // 1.00 -- or local format
您可以在第二位代码中更清楚地看到应该发生的事情 - 不要尝试转换为String然后再次退出;不要在字符串中存储数字。相反,请将所有内容保存在数字变量中,直到您需要显示为止。
另请注意,nf()
并非真正用于舍入精度,尽管它经常以这种方式使用:
nf()用于在数字的左侧和/或右侧添加零。这通常用于对齐数字列表。要从浮点数中删除数字,请使用int(),ceil(),floor()或round()函数。 https://processing.org/reference/nf_.html
如果需要解决您的语言环境,可以在Processing中使用Java String格式:
float fval = 199.999/200;
println(fval); // 0.999995
String s = String.format(java.util.Locale.US,"%.2f", fval);
println(s); // 1.00
有关Java方法的更多讨论,请参阅https://stackoverflow.com/a/5383201/7207622。