NSNumber値にするNSNumberに従ってFloatValue等しくありません
質問
ここでは最初の投稿。 NSNumberのに従ってFloatValueメソッドの問題を持つ - 何とか、それは不正確な数を返します。ここに問題があります:私はこのように、配列内のNSNumbersの束を格納します:
NSArray *a = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.04f],
[NSNumber numberWithFloat:0.028f],
[NSNumber numberWithFloat:0.016f],
[NSNumber numberWithFloat:0.004f],
nil];
それから私は、(例えば)最初の値を取得しよう: NSNumber N =(のNSNumber )[objectAtIndex:0]。 CGFloat F = [Nに従ってFloatValue];
デバッガは、N(サマリー列で)示し0.04の値が、Fショー0.0399999991の値。何が私がここに間違っているのでしょうか?
みんなありがとうます。
解決
あなたは何も間違っているしていません。それはどちらか、特にNSNumber
またはCGFloat
の問題ではありません。これは、2のべき乗ではなく、10の累乗に基づいて浮動小数点数、については非常に普遍的なものです。あなたはこの決定的な記事のか<のhref = "HTTPお読みください: //en.wikipedia.org/wiki/Floating_point」のrel = "nofollowをnoreferrer">ウィキペディアの記事でます。
は点であり、標準的な浮動小数点数は、正確に、1/8、1/4、1/2の和である数を表すことができます...。 1/10ではありません。あなたは完全に正確に標準の浮動小数点数を使用して0.1を表現することはできませんので。
あなたが本当にそれに対処する必要性を行う場合は、その合理的な画分または10進浮動小数点数との契約のルーチンがあります。
所属していません StackOverflow