値を含む NSNumber と、NSNumber を NSString に変換する NSNumberFormatter があります。画面に NSNumber 値を表示する必要があります。画面のオーバーフローを避けるために、NSNumber の値が 10^9 を超える場合は、NSNumberFormatterStyle を Scientific に設定します。しかし、もう1つ問題があります。NSNumber 値に小数桁がある場合、出力は "14562442.9..." のようになります。
固定文字数の動的精度を実現したい。例えば:
1 555 234 452
1 555 234.452
1 555 2344.52
浮動小数点型に %g 演算子を使用することで実行できますが、ここではよりクリーンなソリューションになると思います。
これが私の解決策です:
[resultFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[resultFormatter setMaximumFractionDigits:0];
NSInteger integerDigitsCount = [[resultFormatter stringFromNumber:resultNumber] length];
if ([[resultFormatter stringFromNumber:resultNumber] length] > 11) {
[resultFormatter setNumberStyle:NSNumberFormatterScientificStyle];
[resultFormatter setMaximumFractionDigits:3];
}
else {
[resultFormatter setMaximumFractionDigits:3];
if ([[resultFormatter stringFromNumber:resultNumber] length] > 11) {
[resultFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[resultFormatter setMaximumFractionDigits:11 - integerDigitsCount];
}
else {
[resultFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[resultFormatter setMaximumFractionDigits:3];
}
}