iOS对金额千分位显示的问题

最近在项目中遇到了对金额千分位显示的问题,封装了个函数
//金额千分位显示,保留小数点后两位


+ (NSString *)positiveFormat:(NSString *)text{
    
    if(!text || [text floatValue] == 0){
        return @"0.00";
    }else{
        NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
        [numberFormatter setPositiveFormat:@",###.00;"];
        return [numberFormatter stringFromNumber:[NSNumber numberWithDouble:[text doubleValue]]];
    }
    return @"";
}

后来仔细查了查资料和官方API,现在对NSNumber和NSNumberFormatter这两个类做一个简单的介绍
NSNumber数字类,iOS专门封装起来用于数字的处理,可以用string、double、float初始化
NSNumberFormatter数字格式类,用于定义数字的格式
NSNumber过于简单,不再详述


下面在写一段代码,通过代码讲解下NSNumberFormatter
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setFormatterBehavior:NSFoundationVersionNumber10_4]; 
[formatter setNumberStyle:NSNumberFormatterScientificStyle];
[formatter setFormatWidth:9]; // set width
[formatter setPaddingCharacter:@"x"]; // choice padding Char
NSString *convertNumber = [formatter stringFromNumber:number];

下面讲下每个函数:
setFormatterBehavior这个设置和版本有关系,一般不用设置,不用这个函数也可以;
setNumberStyle设置文本显示的格式,是个枚举类型,下面是官方文档+个人翻译
enum {
   NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle,
   NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,
   NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,
   NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,
   NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,
   NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle 
};
typedef NSUInteger NSNumberFormatterStyle;


Constants


NSNumberFormatterNoStyle


Specifies no style.//无格式


Available in OS X v10.4 and later.


NSNumberFormatterDecimalStyle


Specifies a decimal style format.//十进制格式


Available in OS X v10.4 and later.


NSNumberFormatterCurrencyStyle


Specifies a currency style format.//当前系统货币格式(如果是中文就是人民币符号¥)


Available in OS X v10.4 and later.


NSNumberFormatterPercentStyle


Specifies a percent style format.//百分数格式


Available in OS X v10.4 and later.


NSNumberFormatterScientificStyle


Specifies a scientific style format.//科学技术发格式


Available in OS X v10.4 and later.


NSNumberFormatterSpellOutStyle


Specifies a spell-out format; for example, “23” becomes “twenty-three”.//阿拉伯数字转化为文字的格式如“23”变为二三


Available in OS X v10.4 and later.

setFormatWidth设置字符宽度
setPaddingCharacter设置填充字幕:比如你设置的宽度为9,结果数字只有3位,其它的6位用这个函数设置的字母填充。
还有一些其他的方法,用的不多,这里不再详述。
但是,我们发现,我最上边封装的函数用的并不是这个来格式化输出的,而是用的setPositiveFormat,setPositiveFormat是自定义输出格式可以灵活的设置输出格式,而不是仅仅限于上边枚举的几项
那格式应该怎么定义呢?举几个例子你就明白了
如果原始的数字为677789.98
[numberFormatter setPositiveFormat:@",###.00”];//输出:677,789.98
[numberFormatter setPositiveFormat:@".00;”]//输出:677789.98
[numberFormatter setPositiveFormat:@“0%;”]//输出:67778998%
[numberFormatter setPositiveFormat:@“0.00%;”]//输出:67778998.00%

是不是一目了然啦?不用我再多说什么了吧?如果有多个自定义条件,就用;分开
说这这里,你是不是有个疑惑?”#“和“0”有什么不同呢?开始我也有这个疑惑,但是经过大量的实验发现”#“和“0”代表的含义没有任何区别,完全可以相互替换。

你可能感兴趣的:(iOS,ios,金额,NSNumber)