0

我有 NSNumber,它包含 value 和 NSNumberFormatter,它将 NSNumber 转换为 NSString。我需要在屏幕上显示 NSNumber 值。为了避免屏幕溢出,我将 NSNumberFormatterStyle 设置为 Scientific,如果 NSNumber 值大于 10^9。但是还有一个问题。如果 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