私はCGFloatを持っていますが、NSIntegerとして必要です。浮動小数点値は2.0fに似ていますので、小数部分や精度の低下は気にしません。問題なくNSIntegerに変換するにはどのような方法がありますか(もちろん精度の喪失は除きます)。CGFloatから安全にNSIntegerを作成するには?
NSInteger niceInt = niceCGFloat;
と思われますが、バグの匂いがします。あなたは説明できるかもしれない?
私はCGFloatを持っていますが、NSIntegerとして必要です。浮動小数点値は2.0fに似ていますので、小数部分や精度の低下は気にしません。問題なくNSIntegerに変換するにはどのような方法がありますか(もちろん精度の喪失は除きます)。CGFloatから安全にNSIntegerを作成するには?
NSInteger niceInt = niceCGFloat;
と思われますが、バグの匂いがします。あなたは説明できるかもしれない?
バイナリで表現すると2.0fは実際には1.9999999999fになる可能性が常にあります。 intに変換すると、2ではなく1になります。
これを避けるには、浮動小数点値に0.5fを追加します。これは、浮動小数点数を切り捨てるのではなく、四捨五入する効果もあります。
NSInteger niceInt = niceCGFloat + 0.5f;
あなたはlong intに浮動小数点を丸めC関数lrintf()をしたいです。