iOS-Json解析精度損失処理(NSString,Double,Float)

1520 ワード

開発中に価格金額の問題を処理し、バックグラウンドでfloatタイプを返すことが多く、印刷やNSStringに移行すると精度が失われる問題があるため、システムが持参したNSDecimalNumberを使用して処理することで、この問題を解決することができます。


テストの結果、システムNSDecimalNumberは問題値に対して 処理を行った.
  • はまだテストがありますが、重要なことは3回言います:処理精度に関するデータはdoubleで処理してください精度に関するデータはdoubleで処理してください精度に関するデータはdouble
  • で処理してください
        float testDouble = [jsonDict[@"Body"][@"Amount"] floatValue]; //  90.989999999999994
        NSString *convertString = decimalNumberWithString([jsonDict[@"Body"][@"Amount"] stringValue]);
        NSLog(@"%@", convertString);
           testDouble       & NSDecimalNumber 
    //    99.489999999999994 99.49
    //    99.989999999999994 99.99
    //    90                 90.00
    //    90.090000000000003 90.09
    //    90.189999999999998 90.19
    //    90.290000000000006 90.29
    //    90.39              90.39
    //    90.489999999999994 90.49
    //    90.590000000000003 90.59
    //    90.689999999999998 90.69
    //    90.790000000000006 90.79
    //    90.89              90.89
    //    90.989999999999994 90.99
    

    これに対して自分で方法を書いて処理しました。

    /**  Double */
    NSString *decimalNumberWithDouble(double conversionValue){
        NSString *doubleString        = [NSString stringWithFormat:@"%lf", conversionValue];
        NSDecimalNumber *decNumber    = [NSDecimalNumber decimalNumberWithString:doubleString];
        return [decNumber stringValue];
    }
    

    推奨事項:

        , , 。