iOS 数字货币千分位、格式化,就用它(NSNumberFormatter)

NSNumberFormatter功能很强大,对于一些数字,进行格式化、四舍五入、百分数、本地化拼写、货币符号等等,都可实现,可在枚举中查询

话不多话,上代码

一、下面为系统自带的样式

+ (NSString *)localizedStringFromNumber:(NSNumber *)num numberStyle:(NSNumberFormatterStyle)nstyle

二、主要说下,自定义样式

/// 金额转换为千分位,小数位数传参数(用户用)
/// @param amountStr 待转的文本
/// @param format 格式化样式
/// @param decimal 小数位
+ (NSString *)numberThousandPositive:(NSString *)amountStr format:(NSString *)format withDecimal:(NSString *)decimal {
    
    NSString *amtStr = [amountStr stringByReplacingOccurrencesOfString:@"," withString:@""];
    if (amtStr.length <= 0 || [amtStr floatValue] == 0) {
        return [NMAmount quantityWithQuantityStr:amountStr withDecimal:decimal];
    } else {
        NSString *result_positiveFormat = @"";
        NSString *firstStr, *lastStr;
        NSString *defaultFormat = @"###,###,###.00"; //默认样式
        
        if (format.length > 0 && ![format isEqualToString:@""] && format != nil) {
            if ([format containsString:@"."]) {
                firstStr = [format componentsSeparatedByString:@"."].firstObject;
                lastStr = [format componentsSeparatedByString:@"."].lastObject;
            } else {
                firstStr = format;
            }
            
            if ([firstStr containsString:@"0"]) { //有的服务器返回的数据为:0,000.00 格式的,所以需要转换成#,直接用也可以,但是不够千位格式时时,会以0补齐(exp:123 格式化后:0,123.00)
                firstStr = [firstStr stringByReplacingOccurrencesOfString:@"0" withString:@"#"];
            }
            
            if (lastStr.length > 0) {
                result_positiveFormat = [NSString stringWithFormat:@"%@.%@",firstStr,lastStr];
            } else {
                result_positiveFormat = firstStr;
            }
        } else {
            result_positiveFormat = defaultFormat;
        }


//        switch ([decimal integerValue]) {
//            case 0:
//                str = @"###,###,###";
//                break;
//            case 1:
//                str = @"###,###,###.0";
//                break;
//            case 2:
//                str = @"###,###,###.00";
//                break;
//            case 3:
//                str = @"###,###,###.000";
//                break;
//            case 4:
//                str = @"###,###,###.0000";
//                break;
//            case 5:
//                str = @"###,###,###.00000";
//                break;
//            case 6:
//                str = @"###,###,###.000000";
//                break;
//            case 7:
//                str = @"###,###,###.0000000";
//                break;
//            default:
//                break;
//        }
    
        NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
        numberFormatter.numberStyle = NSNumberFormatterDecimalStyle;
        [numberFormatter setPositiveFormat:result_positiveFormat];
        [numberFormatter setMinimumFractionDigits:lastStr.length >0 ? lastStr.length : decimal.integerValue]; //最少保留几位小数
//        [numberFormatter setMinimumIntegerDigits:decimal.integerValue];
        // 数字之间的分隔符
//        [numberFormatter setDecimalSeparator:@"."];
//        [numberFormatter setCurrencyDecimalSeparator:@"`"];
//        numberFormatter.locale = [NSLocale currentLocale];
//        numberFormatter.usesGroupingSeparator = YES;
        // 前缀符号
//        numberFormatter.positivePrefix = @"!";
//        // 后缀符号
//        numberFormatter.positiveSuffix = @"元";
//        // 间隙中添加的符号
//        numberFormatter.paddingCharacter = @"?";
//        // 格式的宽度
//        numberFormatter.formatWidth = 15;
//        // 最多展示三位整数
//        numberFormatter.maximumIntegerDigits = 3;
        

        double textDou = 0.0;
        NSNumber *num = [numberFormatter numberFromString:amtStr];
        textDou += [num doubleValue];
        NSString *retStr = @"";
        if (textDou < 1.00) {
            retStr = [NMAmount quantityWithQuantityStr:[NSString stringWithFormat:@"%f",textDou] withDecimal:[NSString stringWithFormat:@"%ld",(long)(lastStr.length >0 ? lastStr.length : decimal.integerValue)]];
        }else{
            retStr = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:textDou]];
        }
        return retStr;
    }
    return @"";
}

/// 数量转换,保留几位小数(服务器用)
/// @param quantityStr 待转的文本
/// @param decimal 小数位
+ (NSString *)quantityWithQuantityStr:(NSString *)quantityStr withDecimal:(NSString *)decimal{
    
    double douStr = [[quantityStr stringByReplacingOccurrencesOfString:@"," withString:@""] doubleValue];
    
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setPositiveFormat:@"###0.00"];
    [numberFormatter setMinimumFractionDigits:decimal.integerValue];
    NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:douStr]];
    
    return formattedNumberString;
}

三、 货币的默认样式

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle : NSNumberFormatterDecimalStyle
[numberFormatter setPositiveFormat:@""];

自定义样式需要注意的:
.符号代表显示小数点的位置。格式和小数有关系的时候用到。
 0代表占位,如果这个位置没有数字,则使用0填充。
 #代表占位,如果这个位置没有数字,则不显示。
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];

 double number = 0.1234;
 [numberFormatter setPositiveFormat:@"00.00"];
 NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:number]];
 NSLog(@"%@",formattedNumberString);
 // 打印:00.12
 
 double number = 0.1234567890;
 [numberFormatter setPositiveFormat:@"##.#####"];
 NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:number]];
 NSLog(@"%@",formattedNumberString);
 // 打印:.12345
[numberFormatter setPositiveFormat:@"##0.#####"];
则打印:0.12345
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容