2

私はこのサンプルコードを持っています:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
NSString *numberString = @"9.2";
NSNumber *number = [formatter numberFromString:numberString];
NSLog(@"String: %@, Number: %@", numberString, number);

印刷結果は次のとおりです。

String: 9.2, Number: 9.199999999999999

なぜこれが起こるのか分かりません。設定がありませんか?

4

1 に答える 1

2

このリファレンスによると、NSNumberは通常の C 数値型を格納できます。これは非整数を解析することによって取得されるため、選択する 2 つのタイプはfloatdoubleであり、表示される値によって、選択される表現はdoubleです。

9.2 のような小数はdoubles として正確に表現できないため、最も近い表現可能な数値が得られます。これは、デフォルトの精度で表示されます。これは、小数点以下約 16 桁です。

于 2012-04-20T22:27:47.120 に答える