float を小数点以下 1 桁まで表示しようとしています。次のように予期しない結果が得られます。
コード:
float a = 1.25;
float b = 1.35;
NSLog(@"1.25 -> %.1f\n1.35 -> %.1f",a,b);
出力:
1.25 -> 1.2
1.35 -> 1.4
期待される出力、次のいずれか:
1.25 -> 1.3
1.35 -> 1.4
また:
1.25 -> 1.2
1.35 -> 1.3
これは単に 2 進数と 10 進数の間の内部変換によるものですか? もしそうなら、どうすれば期待される動作を得ることができますか?
Xcode 4.6 を使用しています。
編集: わかりました。TonyK と H2CO3 のおかげで、10 進数のバイナリ表現によるものです。
float a = 1.25;
float b = 1.35;
NSLog(@"1.25 -> %.30f\n1.35 -> %.30f",a,b);
1.25 -> 1.25000000000000000000000000000
1.35 -> 1.350000000000000088817841970013
良い情報はたくさんありますが、私が見る限り、2 番目の質問である「期待される動作を得るにはどうすればよいですか?」に取り組んだ人は誰もいません。
Objective-C での数値の丸めは、まったく別の問題です。