Number Formatters 格式数值 显示指定小数位
NSNumberFormatter 有两个方法 stringFromNumber: 和 numberFromString:stringFromNumber: 把数值展现为字符 ,numberFromString:把字符生成一个数值 object.
你也可以使用 localizedStringFromNumber:numberStyle:. 方法 把数值创建一个局部的不生成 formatter实例的 字符.
当有时需要处理一些复杂的需求,继承自 NSFormatter 的方法 (例如 getObjectValue:forString:errorDescription, )getObjectValue:forString:range:error: 方法可以指定解析字符串中的某个范围内,并返回那个范围.(如果失败,会表明哪里出现错误) 而且同时会返回 NSError 包含详细的失败原因的实例
Use Formatter Styles to Present Numbers With the User’s Preferences
设置一个数值的格式 有很多方法 一般情况下. 你可以使用NSNumberFormatter 的setNumberStyle:设置预先设定好的格式.
NSNumberFormatter 可以很容易的设置一系列用户在系统设置里面的系统内置的格式. 包括
NSNumberFormatterDecimalStyle,
NSNumberFormatterCurrencyStyle,
NSNumberFormatterPercentStyle,
NSNumberFormatterScientificStyle,
NSNumberFormatterSpellOutStyle
NSNumberFormatterNoStyle,
这些属性都是用户系统设置里面设置的.
你可以使用 setNumberStyle: 方法来设置格式 下面的例子是设置一个日期的格式.
复制代码
- NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:122344.4563]];
NSLog(@"formattedNumberString: %@", formattedNumberString);
// Output for locale en_US: "formattedNumberString: formattedNumberString: 122,344.453"
Use Format Strings to Specify Custom Formats
自定义数值格式 使用setPositiveFormat: 和 setNegativeFormat: 两个方法 请看如下例子
复制代码
- NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setPositiveFormat:@"###0.##"];
NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:122344.4563]];
NSLog(@"formattedNumberString: %@", formattedNumberString);
// Output for locale en_US: "formattedNumberString: formattedNumberString: 122,344.45"
Percentages 百分数 百分比显示
复制代码
- NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setPositiveFormat:@"0.00%;0.00%;-0.00%"];
NSNumber *four = [NSNumber numberWithFloat:4.0];
NSLog(@"%@", [numberFormatter stringFromNumber:four]);
// output: "400.00%"
复制代码
- NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterPercentStyle];
NSNumber *four = [NSNumber numberWithFloat:4.0];
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[numberFormatter setLocale:usLocale];
NSLog(@"en_US: %@", [numberFormatter stringFromNumber:four]);
// output: "en_US: 400%"
NSLocale *faLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"fa_IR"];
[numberFormatter setLocale:faLocale];
NSLog(@"fa_IR: %@", [numberFormatter stringFromNumber:four]);
// output: "fa_IR: ٪۴۰۰"
Nomenclature
NSNumberFormatter provides several methods (such as setMaximumFractionDigits:) that allow you to manage the number of fraction digitsallowed as input by an instance. “Fraction digits” are the numbersafter the decimal separator (in English locales, the decimal separatoris typically referred to as the “decimal point”).
其他一些范例
http://www.iphonesdkarticles.com/2008/11/localizing-iphone-apps-part-1.html
复制代码
- NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[numberFormatter setFormat:@"0.00%;0.00%;-0.00%"];
NSNumber *four = [NSNumber numberWithFloat:4.0];
NSLog(@"%@", [numberFormatter stringFromNumber:four]);
// output: "400.00%"
复制代码
- NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle:NSNumberFormatterPercentStyle];
NSNumber *four = [NSNumber numberWithFloat:4.0];
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[numberFormatter setLocale:usLocale];
NSLog(@"en_US: %@", [numberFormatter stringFromNumber:four]);
// output: "en_US: 400%"
NSLocale *faLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"fa_IR"];
[numberFormatter setLocale:faLocale];
NSLog(@"fa_IR: %@", [numberFormatter stringFromNumber:four]);
// output: "fa_IR: ٪۴۰۰"
http://www.cnblogs.com/xymwbc/archive/2011/09/21/2184196.html
如何限制文本框只能输入数字
在某些情况下,我们可能需要文本框只能输入数字值,或者其他特定值。这里提供了实现的方法。 建立NSNumberFormatter 的子类,增加这个方法,将 formatter 链接至文本框。 - ( BOOL ) isPar
在某些情况下,我们可能需要文本框只能输入数字值,或者其他特定值。这里提供了实现的方法。
复制代码
- - (BOOL) isPartialStringValid: (NSString **) partialStringPtr
proposedSelectedRange: (NSRangePointer) proposedSelRangePtr
originalString: (NSString *) origString
originalSelectedRange: (NSRange) origSelRange
errorDescription: (NSString **) error
{
NSCharacterSet *nonDigits;
NSRange newStuff;
NSString *newStuffString;
nonDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
newStuff = NSMakeRange(origSelRange.location,
proposedSelRangePtr->location
- origSelRange.location);
newStuffString = [*partialStringPtr substringWithRange: newStuff];
if ([newStuffString rangeOfCharacterFromSet: nonDigits
options: NSLiteralSearch].location != NSNotFound) {
*error = @"不是数字";
return (NO);
} else {
*error = nil;
return (YES);
}
}