0

显示长十进制数的最佳 NSString 格式是什么?当我尝试以下操作时,会出现不希望的舍入:

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

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

xxx,xxx.xxxxxxxxxxxxxx

整数和小数之间的总位数有限制。

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

1,234.567891

或者

1,234,567.891

提前致谢。

4

2 回答 2

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
于 2013-12-04T23:36:56.040 回答
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 个有效数字的十进制数。

从技术上讲,您可以在NSDecimalNumber不使用NSNumberFormatterby的情况下转换为字符串-descriptionWithLocale:。但我不认为它可以进行分组。

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

[NSString stringWithFormat:@"%@", decimalNumber];
于 2013-12-04T23:18:07.880 回答