0

値を含む 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];
    }
}
4

0 に答える 0