iOS中金额字符串格式化显示的方法示例
前言
由于项目中很多地方展现统计金额,比如在一些金融类的App中,对于表示金额类的字符串,通常需要进行格式化后再显示出来。例如:
0–>0.00
123–>123.00
123.456–>123.46
102000–>102,000.00
10204500–>10,204,500.00
它的规则如下:
个位数起每隔三位数字添加一个逗号,同时保留两位小数,也称为“千分位格式”。
我们一开始采取了一种比较笨拙的处理方式如下:
首先根据小数点.将传入的字符串分割为两部分,整数部分和小数部分(如果没有小数点,则补.00,如果有多个小数点则报金额格式错误)。对于小数部分,只取前两位;然后对整数部分字符串进行遍历,从右到左,每三位数前插入一个逗号,,最后再把两部分拼接起来,代码大致如下:
-(NSString*)moneyFormat:(NSString*)money{ if(!money||money.length==0){ returnmoney; } BOOLhasPoint=NO; if([moneyrangeOfString:@"."].length>0){ hasPoint=YES; } NSMutableString*pointMoney=[NSMutableStringstringWithString:money]; if(hasPoint==NO){ [pointMoneyappendString:@".00"]; } NSArray*moneys=[pointMoneycomponentsSeparatedByString:@"."]; if(moneys.count>2){ returnpointMoney; }elseif(moneys.count==1){ return[NSStringstringWithFormat:@"%@.00",moneys[0]]; }else{ //整数部分每隔3位插入一个逗号 NSString*frontMoney=[selfstringFormatToThreeBit:moneys[0]]; if([frontMoneyisEqualToString:@""]){ frontMoney=@"0"; } //拼接整数和小数两部分 NSString*backMoney=moneys[1]; if([backMoneylength]==1){ return[NSStringstringWithFormat:@"%@.%@0",frontMoney,backMoney]; }elseif([backMoneylength]>2){ return[NSStringstringWithFormat:@"%@.%@",frontMoney,[backMoneysubstringToIndex:2]]; }else{ return[NSStringstringWithFormat:@"%@.%@",frontMoney,backMoney]; } } }
其中,stringFormatToThreeBit:方法的实现如下:
-(NSString*)stringFormatToThreeBit:(NSString*)string{ NSString*tempString=[stringstringByReplacingOccurrencesOfString:@","withString:@""]; NSMutableString*mutableString=[NSMutableStringstringWithString:tempString]; NSIntegern=2; for(NSIntegeri=tempString.length-3;i>0;i--){ n++; if(n==3){ [mutableStringinsertString:@","atIndex:i]; n=0; } } returnmutableString; }
上述实现看起来非常繁琐。
其实,苹果提供了NSNumberFormatter用来处理NSString和NSNumber之间的转化,可以满足基本的数字形式的格式化。
正确姿势
我们通过设置NSNumberFormatter的numberStyle和positiveFormat属性,即可实现上述功能,非常简洁,代码如下:
-(NSString*)formatDecimalNumber:(NSString*)string{ if(!string||string.length==0){ returnstring; } NSNumber*number=@([stringdoubleValue]); NSNumberFormatter*formatter=[[NSNumberFormatteralloc]init]; formatter.numberStyle=kCFNumberFormatterDecimalStyle; formatter.positiveFormat=@"###,##0.00"; NSString*amountString=[formatterstringFromNumber:number]; returnamountString; }
关于NSNumberFormatter更详细的用法,可以参考这篇文章的介绍:NSNumberFormatter介绍和用法
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。