用于显示长十进制数的最佳NSString格式?

时间:2013-12-04 22:10:15

标签: ios objective-c nsstring stringwithformat

显示长十进制数的最佳NSString格式是什么?当我尝试这样的事情时,我会得到不合需要的舍入:

[NSString stringWithFormat:@"%g", calcResult];

理想情况下,我想要格式:

xxx,xxx.xxxxxxxxxxxxxx

总计和十进制数之间的总占位数限制。

因此,例如,如果该限制为10个位置,则以下为所需格式:

1,234.567891

1,234,567.891

提前致谢。

2 个答案:

答案 0 :(得分:1)

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

    // This style turns on locale-specific thousands separators.
    // US English uses commas.
    formatter.numberStyle = NSNumberFormatterDecimalStyle;

    // This specifies exactly 10 decimal digits of output.
    formatter.usesSignificantDigits = YES;
    formatter.minimumSignificantDigits = 10;
    formatter.maximumSignificantDigits = 10;

    NSLog(@"%@", [formatter stringFromNumber:@(1234.567891)]);
    NSLog(@"%@", [formatter stringFromNumber:@(1234567.891)]);

输出:

2013-12-04 17:36:32.372 numberFormatter[70896:303] 1,234.567891
2013-12-04 17:36:32.373 numberFormatter[70896:303] 1,234,567.891

答案 1 :(得分:0)

要根据所需的区域设置使用分组和小数分隔符转换数字值,您肯定需要使用NSNumberFormatter

NSNumberFormatter的实例上,您可以设置所需的舍入算法(位数,舍入行为)。它还会自动为您使用当前的语言环境。你会留下一个简单的

 [numberFormatter stringFromNumber:myNumber];

请注意,您将能够使用具有不同舍入规则的不同格式化程序:2/3可以打印为0.60.70.67等等。如果您的号码固有小数,就像财务中出现的数字一样,您可以考虑使用NSDecimalNumber来保存数字值。设置后,NSDecimalNumber的实例将记住确切的小数位数,如果使用通用NSNumberFormatter打印,则永远不会丢失有效数字。

这是如何将总位数限制为10:

  1. 给定十进制数,将其除以或乘以10,直到它在0.1和1之间。
  2. 在小数点后将其舍入到10位数。
  3. 反转1中的程序。
  4. 现在您有一个十进制数字,正好是10位有效数字。
  5. 从技术上讲,您可以将NSDecimalNumber转换为字符串而不使用NSNumberFormatter -descriptionWithLocale:。但我认为它不能进行分组。

    如果您的代码不应该国际化,您也可以

    [NSString stringWithFormat:@"%@", decimalNumber];