2009-09-02 11 views
4

私はCGFloatを持っていますが、NSIntegerとして必要です。浮動小数点値は2.0fに似ていますので、小数部分や精度の低下は気にしません。問題なくNSIntegerに変換するにはどのような方法がありますか(もちろん精度の喪失は除きま​​す)。CGFloatから安全にNSIntegerを作成するには?

NSInteger niceInt = niceCGFloat; 

と思われますが、バグの匂いがします。あなたは説明できるかもしれない?

答えて

6

バイナリで表現すると2.0fは実際には1.9999999999fになる可能性が常にあります。 intに変換すると、2ではなく1になります。

これを避けるには、浮動小数点値に0.5fを追加します。これは、浮動小数点数を切り捨てるのではなく、四捨五入する効果もあります。

NSInteger niceInt = niceCGFloat + 0.5f;

7

あなたはlong intに浮動小数点を丸めC関数lrintf()をしたいです。

関連する問題