JSON を受信して解析し、データを Core Data に保存しています。一部のデータは NSDecimalNumber として格納されている通貨ですが、これらの値の一部は小数点以下 2 桁よりも高い精度を持っています。
たとえば、サービスから 8.2399999995 などの値を取得した場合、これを Core Data に 8.24 として保存します。モデルを小数点以下 2 桁の精度に設定する方法はありますか? または、保存後に各値を手動で丸める必要がありますか?
アップデート
Leijonien さん、情報ありがとうございます。私はそれをやろうとしましたが、フォーマットされた値を保存するのに問題があります。JSON をチェックして Google を検索したところ、サービスからクリーンな値を取得していることがわかりました。RESTKit が問題です.... https://github.com/RestKit/RestKit/issues/1405 .
ただし、NSManagedObject クラスの 1 つでカテゴリを作成し、必要な属性のセッターをオーバーライドし、値をフォーマットしましたが、DB に長い 10 進値が表示されます。これが私のコードです。
- (void)setAmount:(NSDecimalNumber *)amount {
NSDecimalNumberHandler *round = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain
scale:2
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:YES];
NSDecimalNumber *newAmount = [amount decimalNumberByRoundingAccordingToBehavior:round];
NSLog(@"%@", newAmount);
[self setPrimitiveValue:newAmount forKey:@"amount"];
}
奇妙なことnewAmount
に、コンソールに出力すると、希望どおりに 8.24 の形式になりますが、データベースを確認すると、8.2399999995 として保存されます。ここで何か間違ったことをしていますか?