Objective-Cで浮動小数点数を画面に表示する最適な方法とは
浮動小数点数を画面に表示する最適な方法とは
私が「浮動小数点数」という言葉を認識したのは、20年以上前にソフトウェアハウスの入社時研修でのことだった。
C言語で int 型変数に小数点を設定しても小数点以下が削除されてしまう。
int var = 1.2;var : 1
小数点をプログラムで扱うには float や double float という変数型を使う必要があったのだ。
float var = 1.25;var : 1.25
C言語でこの浮動小数点数を画面に表示する際には、printf() 関数を使う。
printf("var = %3.2f\n", var);
printf() 関数は表示する全桁数と小数点以下の桁数を指定しなければならないので、
出力例:var = 1.25var = 1.00var = 1.20var = 1.10var = 1.00
といったように、整数があっても全て小数点以下2桁まで表示されてしまう。
学術的な場合にはこのほうがよいのだが、一般的なアプリでは 1 は 1 と表示したほうが見やすい。
C言語では 変数var が整数のときだけ printf()文表示を分けるようにプログラムをする必要がある。
if (var % 1.0f == 0) { // 整数 printf("var = %3.0f\n", var);} else { // 実数 printf("var = %3.2f\n", var);}
Objective-Cでは、float変数を画面表示用のクラスである NSString型に変換する方法が2つある。
1) NSStringメソッドを使う方法
float変数をNSString型に変換する方法では浮動小数点数は次のように表示される。
C言語の printf() 関数と全く同じ結果になる。
UILabel *mHeight;_mHeight.text = [NSString stringWithFormat:@"_mHeight.text : %3.2f", var];出力例:_mHeight.text : 1.25_mHeight.text : 1.00_mHeight.text : 1.20_mHeight.text : 1.10_mHeight.text : 1.00
2) NSNumberメソッドを使う方法
float変数をNSNumber型に変換したうえでNSString型に変換する方法は浮動小数点数を画面に見やすく表示できる。
UILabel *mHeight;_mHeight.text = [[NSNumber numberWithFloat:var] stringValue];出力例:1.2511.21.11
-
float 型で正確に扱える数値は金額で言えば数万円のオーダーまでだ、それ以上を扱う場合には double float 型の倍精度浮動小数点数の変数を使う必要がある。
また、float 型は整数のように値が同数かどうかを比較することはできない。
int seisuA = 10000, seisuB = 10000;if (seisuA == seisuB) { // seisuAとseisuBは同じ値}
は正常に機能するが
float jissuA = 10000.123, jissuB = 10000.123;if (jissuA == jissuB) { // jissuAとjissuBは同じ値}
は正常に動作しない。