有没有办法在处理过程中将浮点数四舍五入到最接近的小数位?
例如
float x = 1.0000001
float y = 1.1000000001
float a = x + y
round(a)
a = 2.10
round()
处理四舍五入到最接近的整数的标准,但我需要有小数位。我找不到可以满足我要求的功能。我有一些小数点数超过一百位的浮点数,所以如果可能的话,我需要将它们修剪掉。
有没有办法在处理过程中将浮点数四舍五入到最接近的小数位?
例如
float x = 1.0000001
float y = 1.1000000001
float a = x + y
round(a)
a = 2.10
round()
处理四舍五入到最接近的整数的标准,但我需要有小数位。我找不到可以满足我要求的功能。我有一些小数点数超过一百位的浮点数,所以如果可能的话,我需要将它们修剪掉。
这是一个更以处理为中心的函数:
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);
这可能不是最有效的算法,但它确实有效。
我不熟悉处理。但是,在给定整数舍入函数的情况下,舍入到固定小数位数的常用方法是:
a = round(a * PowerOf10) * InversePowerOf10
因此,对于小数点后的一位数,您可以使用:
a = round(a * 10) * .1
有一些注意事项和评论:
a = round(a * PowerOf10) / PowerOf10
. (值得注意的是,在二进制浮点中,这避免了计算 PowerOf10 的倒数时的额外舍入误差。)浮点数并不精确,因此避免添加较小的值(例如 0.0001)可能不会因为舍入误差而始终递增。如果要以小间隔递增值,请使用 int,并在使用前除以 float 值。
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