13

我想将unsigned long int转换为 NSString,格式为每 3 位逗号,既不是小数点也不是尾随零。我可以使用 NSNumberFormatter 毫无问题地将逗号放入 NSString,但由于某种原因,我无法让小数点和零消失。

这是我的代码:

NSNumberFormatter *fmtr;
unsigned long int intToBeDisplayed;
intToBeDisplayed = 1234567890;
fmtr = [[[NSNumberFormatter alloc] init] autorelease];
[fmtr setUsesGroupingSeparator:YES];
[fmtr setGroupingSeparator:@","];
[fmtr setGroupingSize:3];
[fmtr setAlwaysShowsDecimalSeparator:NO];
NSLog([fmtr stringFromNumber:[NSNumber numberWithUnsignedLong:intToBeDisplayed]]);

日志显示“1,234,567,890.00”,适当地添加了逗号,但不幸的是还添加了不需要的“.00”。我已经用int而不是unsigned long int尝试了这个构造,整数值更小,以及来自各种博客的其他构造都无济于事。对于如何从 NSString 中获取小数点和尾随零的任何建议,我将不胜感激。

我是 Objective-C 的新手,在试图解决这个问题的眼睛模糊综合症方面成为老手,但在那个阶段,在 Objective-C 中学到的每一个小教训和取得的成功都是一个巨大的快乐源泉.

4

4 回答 4

31

您还可以使用 setMaximumFractionDigits 截断分数:

unsigned long int intToBeDisplayed = 1234567890;
NSNumber *longNumber = [NSNumber numberWithUnsignedLong:intToBeDisplayed];

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setUsesGroupingSeparator:YES];
[formatter setGroupingSeparator:@","];
[formatter setGroupingSize:3];
[formatter setMaximumFractionDigits:0];

NSString *formattedNumber = [formatter stringFromNumber:longNumber];
NSLog(@"The formatted number is %@", formattedNumber);

结果是:

格式化数字为 1,234,567,890

这适用于 iOS 2.0 及更高版本。

于 2011-07-05T21:09:56.303 回答
5

可能有点晚了,你的问题的核心得到了很好的回答。但我想提醒一下,避免强制使用分隔符和小数点行为。建议尊重设备的区域设置以显示具有正确区域设置行为的数字。

1. NSNumberFormatter:

NSNumberFormatter *valueFormatter = [[NSNumberFormatter alloc]init];
valueFormatter.locale = [NSLocale currentLocale];    // <-- allow the device locale setting
// valueFormatter.GroupingSeparator:@","];           // don't force locale behavior
valueFormatter.numberStyle = NSNumberFormatterDecimalStyle;
valueFormatter.usesGroupingSeparator = YES;
valueFormatter.groupingSize = 3;
valueFormatter.maximumFractionDigits = 0;            // this is important to have your primary issue solved

2. 显示具有正确区域设置的数字:

在您的情况下,可能实际上不需要使用 a NSNumberFormatter,因为无论如何设备都会显示分隔符。为了使用正确的语言环境行为NSString从原始数据类型(例如int)构建一个,只需使用localizedStringWithFormat和格式化数字,如下所示:

NSString *testString = [NSString localizedStringWithFormat:@"%lu", intToBeDisplayed];

有一个NSNumber对象:

NSNumber *longNumber = [NSNumber numberWithUnsignedLong:intToBeDisplayed];
NSString *testString = [NSString localizedStringWithFormat:@"%lu", longNumber.unsignedLongValue];

3. 用NSNumberFormatter(正确的语言环境)显示数字:

NSNumber *longNumber = [NSNumber numberWithUnsignedLong:intToBeDisplayed];
NSString *testString = [NSString localizedStringWithFormat:@"%@", [valueFormatter stringForObjectValue:longNumber]];

longNumber在标签或文本字段中使用 NSNumber 对象,例如:

testLabel.text = [NSString localizedStringWithFormat:@"%@", [valueFormatter stringForObjectValue:longNumber]];

将在具有英语语言环境设置的设备上产生以下输出:

1,234,567,890

在具有(例如)德语语言环境设置的设备上,它会自动显示如下数字:

1.234.567.890

希望我可以为(困难的)数字格式问题添加更多内容。

于 2015-03-26T10:11:42.740 回答
0

这将删除小数点和尾随零。

[fmtr setPositiveFormat:@"#"]

和/或

[fmtr setNegativeFormat:@"#"]
于 2013-10-30T22:47:54.377 回答
-1

这将解决它!

 [fmtr setGeneratesDecimalNumbers:NO];

输出:

2011-03-31 18:40:45.645 Stephen[41552:903] 1,234,567,890
于 2011-03-31T22:41:03.630 回答