sco*_*fax 13 objective-c nsnumberformatter
我想将unsigned long int转换为NSString,每3个数字用逗号格式化,既不是小数点也不是尾随零.我可以使用NSNumberFormatter将逗号放入NSString中,但由于某种原因,我无法获得小数点和0.
这是我的代码:
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]]);
Run Code Online (Sandbox Code Playgroud)
日志显示"1,234,567,890.00",适当地添加逗号但不幸的是不需要的".00".我已尝试使用int而不是unsigned long int,使用较小的整数值,以及来自各种博客的其他构造都无济于事.我非常感谢有关如何从NSString中获取小数点和尾随零的任何建议.
我是Objective-C的新手,在试图解决这个问题的模糊眼睛综合症方面成为老手,但是在那个阶段,在Objective-C中学到的每一点教训和成功都是一个巨大的快乐源泉.
小智 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);
Run Code Online (Sandbox Code Playgroud)
结果如下:
格式化的数字是1,234,567,890
这适用于iOS 2.0及更高版本.
可能有些晚了,您问题的核心已得到很好的回答。但我想提醒一下,避免强制使用分隔符和小数点。强烈建议您尊重设备的语言环境设置,以显示具有正确语言环境行为的数字。
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
Run Code Online (Sandbox Code Playgroud)
2.显示带有正确语言环境的数字:
在您的情况下,NSNumberFormatter由于设备将始终显示分隔符,因此可能不一定需要使用。为了使用正确的语言环境行为NSString从原始数据类型(例如int)构建a ,只需localizedStringWithFormat按如下所示使用并格式化数字:
NSString *testString = [NSString localizedStringWithFormat:@"%lu", intToBeDisplayed];
Run Code Online (Sandbox Code Playgroud)
有一个NSNumber对象:
NSNumber *longNumber = [NSNumber numberWithUnsignedLong:intToBeDisplayed];
NSString *testString = [NSString localizedStringWithFormat:@"%lu", longNumber.unsignedLongValue];
Run Code Online (Sandbox Code Playgroud)
3.使用NSNumberFormatter(正确的语言环境)显示数字:
NSNumber *longNumber = [NSNumber numberWithUnsignedLong:intToBeDisplayed];
NSString *testString = [NSString localizedStringWithFormat:@"%@", [valueFormatter stringForObjectValue:longNumber]];
Run Code Online (Sandbox Code Playgroud)
longNumber在标签或文本字段中使用NSNumber对象,例如:
testLabel.text = [NSString localizedStringWithFormat:@"%@", [valueFormatter stringForObjectValue:longNumber]];
Run Code Online (Sandbox Code Playgroud)
在具有英语语言环境设置的设备上将产生以下输出:
1,234,567,890
在具有(例如)德语区域设置的设备上,它将自动显示数字,如下所示:
1.234.567.890
希望我可以为(困难的)数字格式问题添加更多内容。
Ste*_*tto -1
这会解决它!
[fmtr setGeneratesDecimalNumbers:NO];
Run Code Online (Sandbox Code Playgroud)
输出:
2011-03-31 18:40:45.645 Stephen[41552:903] 1,234,567,890
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10181 次 |
| 最近记录: |