iOS-Json解析精度損失処理(NSString,Double,Float)
1520 ワード
開発中に価格金額の問題を処理し、バックグラウンドでfloatタイプを返すことが多く、印刷やNSStringに移行すると精度が失われる問題があるため、システムが持参したNSDecimalNumberを使用して処理することで、この問題を解決することができます。
テストの結果、システム
NSDecimalNumber
は問題値に対して
処理を行った.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];
}
推奨事項: , , 。
, , 。