おそらく本当にシンプルですが、私は理解していない... 私はNSStringの50.81114
を持っていると私は現在、私は[string doubleValue]
を使用していますダブル...
に変換したいが、これはとして出ています50.811140000002
何が起こっているのですか?NSStringの
おそらく本当にシンプルですが、私は理解していない... 私はNSStringの50.81114
を持っていると私は現在、私は[string doubleValue]
を使用していますダブル...
に変換したいが、これはとして出ています50.811140000002
何が起こっているのですか?NSStringの
Double
ディスコ(及び任意の浮動小数点数)が精度の独自の制限があり、通常それは、約15〜16の数字であろう。これはObjective-Cだけではなく、バイナリ浮動小数点表現の限界のためにすべての言語のためであることに注意してください。
50.81114
は2進数で正確に表示できないため、近似を使用する必要があります。
さらに読むためにWikipediaを読むことができます。
限定精度のためdouble
は50.81114
を保存できません。ダブルに格納できる最も近い値は50.811140000002
です。
代わりにNSDecimalNumberを使用してください。このように:あなたはむしろバイナリよりも、小数点としてこの数を維持する必要がある場合は
NSString *string = @"50.81114";
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:string];
、数はNSDecimalNumber
ではなくdouble
使用しています。