之前number 轉string時候調用stringValue,后來發現未完全轉
1 NSNumber * a_num = [NSNumber numberWithInteger: 12345];
2 NSString *value_str = [num stringValue];(不推薦)
官方推薦用這個方法, localizedStringFromNumber
NSString *num_str = [NSNumberFormatter localizedStringFromNumber:num numberStyle:NSNumberFormatterNoStyle];
通過NSNumberFormatter,可以設置NSNumber輸出的格式。例如如下代碼:
1 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 2 3 4 formatter.numberStyle = NSNumberFormatterDecimalStyle; 5 6 7 NSString *string = [formatter stringFromNumber:[NSNumber numberWithInt:123456789]]; 8 9 10 NSLog(@"Formatted number string:%@",string);
輸出結果為:[1223:403] Formatted number string:123,456,789
其中NSNumberFormatter類有個屬性numberStyle,它是一個枚舉型,設置不同的值可以輸出不同的數字格式。該枚舉包括:
1 enum { 2 3 NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle, //無格式 4 5 NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle, //小數型 6 7 NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle, //貨幣型 8 9 NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle, //百分比型 10 11 NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle, //科學計數型 12 13 NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle //全拼 14 15 y 16 17 NSNumberFormatterRoundCeiling = kCFNumberFormatterRoundCeiling,//四舍五入,原值2.7999999999,直接輸出3 18 NSNumberFormatterRoundFloor = kCFNumberFormatterRoundFloor,//保留小數輸出2.8 正是想要的 19 NSNumberFormatterRoundDown = kCFNumberFormatterRoundDown,//加上了人民幣標志,原值輸出¥2.8 20 NSNumberFormatterRoundUp = kCFNumberFormatterRoundUp,//本身數值乘以100后用百分號表示,輸出280% 21 NSNumberFormatterRoundHalfEven = kCFNumberFormatterRoundHalfEven,//原值表示,輸出 NSNumberFormatterRoundHalfDown = kCFNumberFormatterRoundHalfDown,//原值的中文表示,輸出二點七九九九。。。。 22 NSNumberFormatterRoundHalfUp = kCFNumberFormatterRoundHalfUp //原值中文表示,輸出第三 23 }; 24 25 typedef NSUInteger NSNumberFormatterStyle;
各個枚舉對應輸出數字格式的效果如下:
[1243:403] Formatted number string:123456789
[1243:403] Formatted number string:123,456,789
[1243:403] Formatted number string:¥123,456,789.00
[1243:403] Formatted number string:-539,222,988%
[1243:403] Formatted number string:1.23456789E8
[1243:403] Formatted number string:一億二千三百四十五萬六千七百八十九
其中第三項和最后一項的輸出會根據系統設置的語言區域的不同而不同