Number Formatters 格式…

这篇博客介绍了如何使用 NSNumberFormatter 对数值进行格式化,包括预设样式、自定义格式、百分比显示和国际化处理。通过设置不同的格式属性,如 setNumberStyle:、setPositiveFormat: 和 setNegativeFormat:,可以实现对数值的多样化展示,适应不同场景和用户偏好。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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%"

如果你用上面显示百分比的方法会很出现一些误解,因为系统会自动乘以100. 可以使用 NSNumberFormatterPercentStyle  设置百分比,并根据每个国家不同的显示


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);

    }           

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值