2

NSString2桁の標準的な10進数(例:8.20)を含むをに変換すると、 NSNumber(時々)余分な桁が発生し、結果をNSLogCore Dataに記録したり(floatまたはdoubleとして)保存したりすると、奇妙な丸め動作が発生します)、例:8.20->8.19999999999999。

これは、数値を変換するために使用しているコードです。

 NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
 [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
 [numberFormatter setMaximumFractionDigits:5];
 NSNumber *num = [numberFormatter numberFromString:str];

NSNumberへの変換がなぜ数を台無しにするのか理解できません。私のコードの何が問題になっていますか?

4

4 に答える 4

2

これは、C/Objective-C (および他の多くの言語) で float と double がどのように動作するかです。たとえば、python 8.0 と入力すると、結果は 8.000000000001 になります。NSScannerを使用してプリミティブな数値型 (double、float) に変換することをお勧めします。

于 2012-07-03T17:49:40.067 に答える
1

NSNumber を使用して 8.28 の doublevalue を保存すると、常に 8.2799999999 が表示されるという問題が発生しました...,コンピューターの数値精度が原因だと思います。このコードを試してください。

 + (NSString *)dealWithDouble:(double)doubleValue {
        double d2 = doubleValue;
        NSString *d2Str = [NSString stringWithFormat:@"%lf", d2];
        NSDecimalNumber *num = [NSDecimalNumber decimalNumberWithString:d2Str];
        NSString *str2D = [num stringValue];
        return str2D;
    }
于 2016-09-30T06:39:06.147 に答える
1

NSNumberFormatter を使用して文字列を float に変換するのはなぜですか?

NSNumber *num = [NSNumber numberWithFloat:[str floatValue]];
于 2012-07-03T17:56:56.583 に答える