我想将 unsigned long int 转换为每3位数字用逗号格式化的NSString,既不是小数点也不是尾随零。我可以使用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中学到的每一点教训和成功都是源头非常高兴。
答案 0 :(得分: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及更高版本。
答案 1 :(得分: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。显示具有正确语言环境的数字:
在您的情况下,可能没有必要使用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]];
在标签或textField中使用NSNumber对象longNumber
,例如:
testLabel.text = [NSString localizedStringWithFormat:@"%@", [valueFormatter stringForObjectValue:longNumber]];
将在具有英语区域设置的设备上生成以下输出:
<强> 1234567890 强>
在具有(例如)德语区域设置的设备上,它会自动显示如下数字:
<强> 1.234.567.890 强>
希望我能为(困难的)数字格式问题添加更多内容。
答案 2 :(得分:0)
这将删除小数点和尾随零。
[fmtr setPositiveFormat:@"#"]
和/或
[fmtr setNegativeFormat:@"#"]
答案 3 :(得分:-1)
这将解决它!
[fmtr setGeneratesDecimalNumbers:NO];
输出:
2011-03-31 18:40:45.645 Stephen[41552:903] 1,234,567,890