显示长十进制数字的最佳NSString格式是什么?当我尝试类似的东西时,会出现不希望的舍入
[NSString stringWithFormat:@"%g", calcResult];
理想情况下,我想要格式:
xxx,xxx.xxxxxxxxxxxxxx
对整数和小数之间的总位数有限制。
例如,如果限制为10位,则以下将是所需的格式:
1,234.567891
或
1,234,567.891
提前谢谢。
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
要根据所需的语言环境使用分组和小数分隔符转换数值,您肯定需要使用NSNumberFormatter
。
在NSNumberFormatter
的实例上,您可以设置所需的舍入算法(位数、舍入行为)。此外,它将自动为您使用当前的语言环境。你会留下一个简单的
[numberFormatter stringFromNumber:myNumber];
请注意,您可以使用具有不同舍入规则的不同格式化程序:2/3
可以打印为0.6
、0.7
、0.67
等等。如果您的数字是固有的十进制,就像金融中出现的数字一样,您可以考虑使用NSDecimalNumber
来保存数值。设置后,NSDecimalNumber
的实例将记住小数位数的确切数字,如果使用通用NSNumberFormatter
打印,则永远不会丢失有效数字。
这就是如何将总位数限制为10:
- 给定一个十进制数,将其除以或乘以10,直到它在0.1和1之间
- 四舍五入到小数点后的10位
- 与1中的步骤相反
- 现在您有一个精确到10位有效数字的十进制数
从技术上讲,您可以通过-descriptionWithLocale:
将NSDecimalNumber
转换为字符串,而无需使用NSNumberFormatter
。但我不认为它可以分组。
如果你的代码不应该国际化,你也可以做
[NSString stringWithFormat:@"%@", decimalNumber];