処理中に浮動小数点数を小数点以下第2位に四捨五入する方法はありますか?
例えば
float x = 1.0000001
float y = 1.1000000001
float a = x + y
round(a)
a = 2.10
処理の標準round()
は最も近い整数に丸められますが、小数を配置する必要があります。探している機能を実行する関数が見つかりません。小数点以下100桁を超えるフロートがあるので、可能であれば、それらをトリミングする必要があります。
処理中に浮動小数点数を小数点以下第2位に四捨五入する方法はありますか?
例えば
float x = 1.0000001
float y = 1.1000000001
float a = x + y
round(a)
a = 2.10
処理の標準round()
は最も近い整数に丸められますが、小数を配置する必要があります。探している機能を実行する関数が見つかりません。小数点以下100桁を超えるフロートがあるので、可能であれば、それらをトリミングする必要があります。
より処理中心の関数は次のとおりです。
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
したがって、小数点以下1桁の場合は、次を使用できます。
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