2011-08-03 6 views
6

おそらく本当にシンプルですが、私は理解していない... 私はNSStringの50.81114を持っていると私は現在、私は[string doubleValue]を使用していますダブル...
に変換したいが、これはとして出ています50.811140000002
何が起こっているのですか?NSStringの

答えて

2

Doubleディスコ(及び任意の浮動小数点数)が精度の独自の制限があり、通常それは、約15〜16の数字であろう。これはObjective-Cだけではなく、バイナリ浮動小数点表現の限界のためにすべての言語のためであることに注意してください。

50.81114は2進数で正確に表示できないため、近似を使用する必要があります。

さらに読むためにWikipediaを読むことができます。

11

限定精度のためdouble50.81114を保存できません。ダブルに格納できる最も近い値は50.811140000002です。

代わりにNSDecimalNumberを使用してください。このように:あなたはむしろバイナリよりも、小数点としてこの数を維持する必要がある場合は

NSString *string = @"50.81114"; 
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:string]; 
1

、数はNSDecimalNumberではなくdouble使用しています。