浮点数,舍入到2位小数 - 处理

时间:2017-09-30 02:16:02

标签: processing number-formatting

我从很久以前开始学习处理,我遇到了一个问题;当将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位小数并仍然让它成为一个浮点数呢?

感谢您花时间阅读本文,

1 个答案:

答案 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