您的位置:首页 > 移动开发 > IOS开发

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

2015-12-17 17:44 543 查看
最近在项目中遇到了对金额千分位显示的问题,封装了个函数

//金额千分位显示,保留小数点后两位

+ (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”代表的含义没有任何区别,完全可以相互替换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: