起源:123456.00 —> 123,456.00
最近项目太吃紧,感觉真的没有太多的时间去整理吃不下的东西,刚好入职培训期,还有点时间可以搞搞,其实就是标题所示,数值太大,根据PC端的显示结果,每三位加一个逗号,这需求虽然觉得没什么,但是觉得改动还是太烦,Google了一下,最多提示的还是这样的一种思路:先判断有没有点数点,截取小数点之前的,然后倒序,每三个插入一个”,”,然后再顺序正过来,拼接小数点后面的,就是各种for循环 if判断之后再拼接,但好麻烦
NSNumberFormatter
搜到这样一个方法:NSNumberFormatter,便有了下面这样一段代码
NSNumberFormatter formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = kCFNumberFormatterDecimalStyle;
NSString numberStr = [formatter stringFromNumber:[NSNumber numberWithDouble:21231234567890.12]];
NSLog(@”number Obj::%@”,numberStr);
这样可以满足需求,但是尝试增加到万亿位(真的是蛇精病才可能产生万亿的价格)调试一番只有double类型不超出满足位数。。。
typedef CF_ENUM(CFIndex, CFNumberFormatterStyle) { // number format styles
kCFNumberFormatterNoStyle = 0, // 无类型 123456
kCFNumberFormatterDecimalStyle = 1, // 123,456.023 (小数点后面最多3位)
kCFNumberFormatterCurrencyStyle = 2, //货币 US$ 123,456.02(会根据手机语言不同会改变)
kCFNumberFormatterPercentStyle = 3, // 12,345,602%
kCFNumberFormatterScientificStyle = 4, // 1.2345602322E5
kCFNumberFormatterSpellOutStyle = 5, // 十二万三千四百五十六点〇二三二二
kCFNumberFormatterOrdinalStyle CF_ENUM_AVAILABLE(10_11, 9_0) = 6, // 第12,3456
kCFNumberFormatterCurrencyISOCodeStyle CF_ENUM_AVAILABLE(10_11, 9_0) = 8, // USD 123,456.02
kCFNumberFormatterCurrencyPluralStyle CF_ENUM_AVAILABLE(10_11, 9_0) = 9, // 123,456.02美元
kCFNumberFormatterCurrencyAccountingStyle CF_ENUM_AVAILABLE(10_11, 9_0) = 10, // US$123,456.02
};
多扯一下
另外一个方法可以自定义数字对象的格式的
// 自定义格式
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
// setPositiveFormat
[formatter setPositiveFormat:@"####,###0.0000;"]; //随便定义的格式...
NSLog(@"--第二种转换后的格式是--- %@",[formatter stringFromNumber:[NSNumber numberWithDouble:num.doubleValue]]);