質問

ここでは最初の投稿。 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進浮動小数点数との契約のルーチンがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top