NumberFormatter數字格式化

weixin_34075268發表於2018-12-02

GitHub Demo: https://github.com/BaHui/BHNumberFormatterHelper

簡介

NSNumberFormatter: 數字格式化器, 可以將數字根據需要, 進行樣式的格式化, 如:12,346,789.44 / $12,346,789.45, 或者對數字進行向上/向下取值, 以及對小數位數的保留.

方法測試

- (void)viewDidLoad {
    [super viewDidLoad];
    
    double doubleValue = 12346789.44421;
    NSLog(@"原始: %f", doubleValue);
    
    // 無格式, 四捨五入
    NSString *roundNoFloatsString = [NSNumberFormatter roundNoStyleWithDoubleValue:doubleValue scale:2];
    NSLog(@"無格式, 四捨五入-> %@", roundNoFloatsString); // 輸出: 無格式, 四捨五入-> 12346789.44

    // 向上取整(進)
    NSString *ceilingNoFloatsString = [NSNumberFormatter ceilingNoStyleWithDoubleValue:doubleValue scale:3];
    NSLog(@"無格式, 向上取值-> %@", ceilingNoFloatsString); // 輸出: 無格式, 向上取值-> 12346789.445

    // 向下取整(舍)
    NSString *floorNoFloatsString = [NSNumberFormatter floorNoStyleWithDoubleValue:doubleValue scale:2];
    NSLog(@"無格式, 向下取值-> %@", floorNoFloatsString); // 輸出: 無格式, 向下取值-> 12346789.44

    
    
    // 逗號間隔, 保留`scale`位小數, 四捨五入
    NSString *commaSeparatedString = [NSNumberFormatter roundCommaSeparateWithDoubleValue:doubleValue scale:2];
    NSLog(@"逗號分割-> %@", commaSeparatedString); // 輸出: 逗號分割-> 12,346,789.44
    
    // 逗號間隔, 保留`scale`位小數, 向上取值 (進)
    NSString *ceilingCommaSeparatedString = [NSNumberFormatter ceilingCommaSeparateWithDoubleValue:doubleValue scale:2];
    NSLog(@"逗號分割, 向上取值-> %@", ceilingCommaSeparatedString); // 輸出: 逗號分割, 向上取值-> 12,346,789.45
    
    // 逗號間隔, 保留`scale`位小數, 向下取值 (舍)
    NSString *floorCommaSeparatedString = [NSNumberFormatter floorCommaSeparateWithDoubleValue:doubleValue scale:3];
    NSLog(@"逗號分割, 向下取值-> %@", floorCommaSeparatedString); // 輸出: 逗號分割, 向下取值-> 12,346,789.444
    
    
    
    // $/¥字首, 逗號間隔, 保留`scale`位小數, 四捨五入
    NSString *roundCurrencyCommaSeparateString = [NSNumberFormatter roundCurrencyCommaSeparateWithDoubleValue:doubleValue scale:2];
    NSLog(@"$/¥字首, 逗號分割, 向下取值-> %@", roundCurrencyCommaSeparateString); // 輸出: $/¥字首, 逗號分割, 向下取值-> $12,346,789.44
    
    // $/¥字首, 逗號間隔, 保留`scale`位小數, 向上取值 (進)
    NSString *ceilingCurrencyCommaSeparateString = [NSNumberFormatter ceilingCurrencyCommaSeparateWithDoubleValue:doubleValue scale:2];
    NSLog(@"$/¥字首, 逗號分割, 向下取值-> %@", ceilingCurrencyCommaSeparateString); // 輸出: $/¥字首, 逗號分割, 向下取值-> $12,346,789.45
    
    // $/¥字首, 逗號間隔, 保留`scale`位小數, 向下取值 (舍)
    NSString *floorCurrencyCommaSeparateString = [NSNumberFormatter floorCurrencyCommaSeparateWithDoubleValue:doubleValue scale:2];
    NSLog(@"$/¥字首, 逗號分割, 向下取值-> %@", floorCurrencyCommaSeparateString); // 輸出: $/¥字首, 逗號分割, 向下取值-> $12,346,789.44
    
    
    
    // %字尾, 逗號間隔, 保留`scale`位小數, 四捨五入
    NSString *roundPercentCommaSeparateString = [NSNumberFormatter roundPercentCommaSeparateWithDoubleValue:doubleValue scale:1];
    NSLog(@"百分號字尾, 逗號間隔, 保留`scale`位小數, 四捨五入-> %@", roundPercentCommaSeparateString);// 輸出: %字尾, 逗號間隔, 保留`scale`位小數, 四捨五入-> 1,234,678,944.4%

    // %字尾, 逗號間隔, 保留`scale`位小數, 向上取值 (進)
    NSString *ceilingPercentCommaSeparateString = [NSNumberFormatter ceilingPercentCommaSeparateWithDoubleValue:doubleValue scale:1];
    NSLog(@"百分號字尾, 逗號間隔, 保留`scale`位小數, 向上取值-> %@", ceilingPercentCommaSeparateString);// 輸出: %字尾, 逗號間隔, 保留`scale`位小數, 向上取值-> 1,234,678,944.5%
    
    // %字尾, 逗號間隔, 保留`scale`位小數, 向下取值 (舍)
    NSString *floorPercentCommaSeparateString = [NSNumberFormatter floorPercentCommaSeparateWithDoubleValue:doubleValue scale:1];
    NSLog(@"百分號字尾, 逗號間隔, 保留`scale`位小數, 向下取值-> %@", floorPercentCommaSeparateString);// 輸出: %字尾, 逗號間隔, 保留`scale`位小數, 向下取值-> 1,234,678,944.4%
}

格式化方法

#pragma mark - 無格式

// Return: 無格式, 四捨五入
+ (NSString *)roundNoStyleWithDoubleValue:(double)doubleValue scale:(NSInteger)scale;

// Return: 無格式, 向上取值 (進)
+ (NSString *)ceilingNoStyleWithDoubleValue:(double)doubleValue scale:(NSInteger)scale;

// Return: 無格式, 向下取值 (舍)
+ (NSString *)floorNoStyleWithDoubleValue:(double)doubleValue scale:(NSInteger)scale;

#pragma mark - 逗號間隔

// Return: 逗號間隔, 保留`scale`位小數, 四捨五入
+ (NSString *)roundCommaSeparateWithDoubleValue:(double)doubleValue scale:(NSInteger)scale;

// Return: 逗號間隔, 保留`scale`位小數, 向上取值 (進)
+ (NSString *)ceilingCommaSeparateWithDoubleValue:(double)doubleValue scale:(NSInteger)scale;

// Return: 逗號間隔, 保留`scale`位小數, 向下取值 (舍)
+ (NSString *)floorCommaSeparateWithDoubleValue:(double)doubleValue scale:(NSInteger)scale;

#pragma mark - $/¥字首, 逗號間隔 (字首符號有本地化自動選擇)

// Return: $/¥字首, 逗號間隔, 保留`scale`位小數, 四捨五入
+ (NSString *)roundCurrencyCommaSeparateWithDoubleValue:(double)doubleValue scale:(NSInteger)scale;

// Return: $/¥字首, 逗號間隔, 保留`scale`位小數, 向上取值 (進)
+ (NSString *)ceilingCurrencyCommaSeparateWithDoubleValue:(double)doubleValue scale:(NSInteger)scale;

// Return: $/¥字首, 逗號間隔, 保留`scale`位小數, 向下取值 (舍)
+ (NSString *)floorCurrencyCommaSeparateWithDoubleValue:(double)doubleValue scale:(NSInteger)scale;

#pragma mark - %字尾, 逗號間隔

// Return: %字尾, 逗號間隔, 保留`scale`位小數, 四捨五入
+ (NSString *)roundPercentCommaSeparateWithDoubleValue:(double)doubleValue scale:(NSInteger)scale;

// Return: %字尾, 逗號間隔, 保留`scale`位小數, 向上取值 (進)
+ (NSString *)ceilingPercentCommaSeparateWithDoubleValue:(double)doubleValue scale:(NSInteger)scale;

// Return: %字尾, 逗號間隔, 保留`scale`位小數, 向下取值 (舍)
+ (NSString *)floorPercentCommaSeparateWithDoubleValue:(double)doubleValue scale:(NSInteger)scale;

交流與建議

相關文章