各种数字格式化

来源:互联网 发布:网络智能电视机顶盒 编辑:程序博客网 时间:2024/06/07 05:09

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: 方法来设置格式 下面的例子是设置一个日期的格式.
复制代码
  1. 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: 两个方法 请看如下例子
复制代码
  1. 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 百分数 百分比显示


复制代码
  1. 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  设置百分比,并根据每个国家不同的显示

复制代码
  1. 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

复制代码
  1. 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%"


复制代码
  1. 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

在某些情况下,我们可能需要文本框只能输入数字值,或者其他特定值。这里提供了实现的方法。
复制代码
  1. - (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);
        }
              
    }