有没有办法在处理过程中将浮点数舍入到最近的小数位?
例如
float x = 1.0000001
float y = 1.1000000001
float a = x + y
round(a)
a = 2.10
标准round()
处理轮次到最接近的整数,但我需要有小数位。我找不到能满足我要求的功能。我有一些超过一百个小数位的花车,所以如果可能的话,我需要将它们修剪下来。
答案 0 :(得分:2)
这是一个更加以处理为中心的功能:
float fixDec(float n, int d) {
return Float.parseFloat(String.format("%." + d + "f", n));
}
并测试它:
float x = 1.0000001;
float y = 1.1000000001;
x = fixDec(x, 2);
y = fixDec(y, 2);
float a = x + y;
round(a);
这可能不是最有效的算法,但它有效。
答案 1 :(得分:1)
我不熟悉处理。但是,给定舍入到整数函数舍入到固定小数位数的常用方法是:
a = round(a * PowerOf10) * InversePowerOf10
因此,对于小数点后的一位数,您可以使用:
a = round(a * 10) * .1
有一些警告和评论:
a = round(a * PowerOf10) / PowerOf10
。 (值得注意的是,在二进制浮点数中,这可以避免在计算PowerOf10的逆时间时出现额外的舍入误差。)答案 2 :(得分:0)
浮点数不精确,所以避免添加小值(例如0.0001) 由于舍入误差,可能不会总是递增。如果你想 以小间隔递增一个值,使用int,然后除以a 使用前浮动值。
http://processing.org/reference/float.html
int i = 10001000;
int j = 11000001;
float a = round((i + j)/pow(10,5));
a /= 100;
println(a);
2.1