1

科学的なスタイルでいくつかの小数を表示しようとしています。NSDecimalNumber および NSNumberFormatter オブジェクトを使用しています。ただし、最小桁数と最大桁数を設定すると、元の数値の一部の情報が失われるようです。たとえば、次のコード例を考えてみましょう。

NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithInt:3123400] decimalValue]];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterScientificStyle];
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];

NSString *result = [formatter stringFromNumber:dn];
// Expected: result is 3.12E6
// Actual: result is 3.10E6

[formatter release];

この場合、NSString 変数の結果は 3.12E6 になると予想していました。setMinimumFractionDigits および setMaximumFractionDigits 呼び出しは、最終結果を小数点以下 2 桁でロックします。残念ながら、2 桁目は、期待される値 2 ではなく、実際には 0 です。

setMinimumFractionDigits および setMaxiumFractionDigits 呼び出しを 3 に増やすと、結果は 3.120E6 になります。最後の桁 (この場合は 3 番目の小数桁) は、期待される値 3 ではなく、再び 0 のままです。

これらの場合、最後の桁が 0 なのはなぜですか? 欠落している NSNumberFormatter のセットアップまたは構成はありますか? Xcode バージョン 3.2.2 を使用しています。

4

0 に答える 0