小数型変数であるdoubleやfloatは丸め誤差などの影響を受ける。
例えば、0.1ずつインクリメントしていても0.1999999のようになることがある。
実際は0.2として数値を扱いたいのに0.1999999では”==”などの演算子がうまく利用できない。
そこで、小数第n位を切り捨てもしくは四捨五入する方法を紹介する。
使用する関数は
floor(n) 小数部を切り捨てる関数。
引数nはfloat型 返り値はint型
round(n) 小数第一位を四捨五入する関数。
引数nはfloat型 返り値はint型
適用したい小数の位が小数第一位になるように10の冪乗を掛けてあげてから、
これらの関数を適用することで任意の桁で小数の切り捨て、四捨五入を適用することができる。
void setup(){
float f = 123.456;
int n = 2;//小数第3位に対して処理を行う
float f1 = float(floor(f*pow(10,n)))/pow(10,n);//切り捨て
float f2 = float(round(f*pow(10,n)))/pow(10,n);//四捨五入
println("f1="+f1);
println("f2="+f2);
}
f1=123.45 f2=123.46