格式化为字符串后的NSNumber精度

时间:2013-11-03 20:27:48

标签: objective-c nsnumber nsnumberformatter floating-point-precision

我有NSNumber,它包含值和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运算符用于float类型来完成,但我认为,这里可以提供更清晰的解决方案。


这是我的解决方案:

[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];
    }
}

0 个答案:

没有答案