現在、次を使用してスケーリング係数を計算します。
CGFloat scale = CGContextGetCTM(context).a;
NSLog(@"SCALE : %f", scale);
0.124979、0.249958、0.499917 の浮動小数点値を受け取ります。roundf を使用して、それぞれ 0.125、0.250、0.500 に変換するにはどうすればよいですか。
現在、次を使用してスケーリング係数を計算します。
CGFloat scale = CGContextGetCTM(context).a;
NSLog(@"SCALE : %f", scale);
0.124979、0.249958、0.499917 の浮動小数点値を受け取ります。roundf を使用して、それぞれ 0.125、0.250、0.500 に変換するにはどうすればよいですか。
これを試して........
NSLog(@"SCALE : %.3f", scale);
NSString *value = [NSString stringWithFormat:@"%.3f", theFloat];
前のSOの回答から盗まれました
まだ浮動小数点数であるが、表示目的だけでなく、小数点以下 3 桁までの丸められた数値が必要なように聞こえますか? それはあなたが求めているものですか?IEEE 浮動小数点数は本当に苦痛です。foo = 1.5 を割り当てると、1.499999999 になり、if ( foo == 1.5 )
失敗すると言うことができます。私にはバグのように思えますが、これがネット上で「正しい」理由についての長い説明があります。私には、象牙の塔のように正しく、現実世界では役に立たないように思えます。
だから、いくつかの可能性。1000 を掛けてから整数値に切り上げてから 1000 で割ってもうまくいくのだろうか... もちろん、同じ IEEE 浮動バグ、申し訳ありませんが仕様がまだあなたを噛むかもしれません... 試してみる価値があります。
好奇心をそそられ、簡単なテストを書きました。
CGFloat foo = 0.124979;
NSLog(@"foo is: %f", foo );
NSInteger ifoo = ceil(foo * 1000.0);
foo = ifoo / 1000.0;
NSLog( @"ifoo is: %d, and back to foo is: %f", ifoo, foo );
これを出力します(とにかくシミュレーターで):
test[5127:207] foo is: 0.124979
test[5127:207] ifoo is: 125, and back to foo is: 0.125000
それはあなたが望むことをするかもしれません。
幸運。
このstackoverflowリンクを見てください。丸めて文字列としてキャストするか、NSNumberFormatterを使用して丸めるという2つの適切なオプションがあります。
リンク: CGFLoat の丸め
これがお役に立てば幸いです!