数字做逗号分割并保留两位小数(只舍不入)

该博客介绍了如何通过扩展NSString创建一个分类,实现数字的逗号分割并仅舍去不四舍五入到两位小数的功能。首先定义了一个方法用于整数的分割,然后根据数字的小数位数进行不同的处理,确保结果正确。同时提供了判断字符串是否为整数或浮点数的方法,以防止非法输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建一个NSString的分类


#import <Foundation/Foundation.h>

 

@interface NSString(divideNum)

 

#pragma mark - 保留两位小数,只舍不入

- (instancetype)dividFormat;

 

@end



#import "NSString+divideNum.h"

 

@implementationNSString (divideNum)

 

#pragma mark - 整数进行分割(例如:12345 -12345

- (NSString *)changeNumberFormat:(NSString *)num {

    if (num == nil) {

        return @"";

   }

    int count = 0;

    longlong int a = num.longLongValue;

    while (a != 0)

   {

       count++;

        a /= 10;

   }

    NSMutableString *string = [NSMutableStringstringWithString:num];

    NSMutableString *newstring = [NSMutableStringstring];

    while (count > 3) {

        count -= 3;

        NSRange rang = NSMakeRange(string.length - 3, 3);

        NSString *str =[string substringWithRange:rang];

        [newstring insertString:str atIndex:0];

        [newstring insertString:@"," atIndex:0];

        [string deleteCharactersInRange:rang];

   }

    [newstring insertString:string atIndex:0];

   

    return newstring;

}

 

- (instancetype)dividFormat {

    if (![self isPureFloat:self] && ![self isPureInt:self]) {

        //防止不是数字的情况

        return @"--";

   }

    NSArray<NSString *> *arr = [self componentsSeparatedByString:@"."];

    if (arr.count == 1) {

        // 整数:123

        NSMutableString *str =[self changeNumberFormat:arr.firstObject].mutableCopy;

        [str appendString:@".00"];

       

        return str;

    } elseif (arr.count == 2) {

        NSString *decimal =arr[1];

        if (decimal.length == 1) {

            //一位小数10.0

            NSMutableString *reStr= [arr.firstObject dividFormat].mutableCopy;

            reStr = [reStr stringByReplacingOccurrencesOfString:@".00" withString:@""].mutableCopy;

            [reStr appendString:@"."];

           

            NSMutableString*resultStr = decimal.mutableCopy;

            [resultStr appendFormat:@"0"];

            [reStr appendString:resultStr];

           

            return reStr;

        } else if (decimal.length == 2) {

            //两位小数10.00

            NSMutableString*resultStr = [arr.firstObject dividFormat].mutableCopy;

            resultStr =[resultStr stringByReplacingOccurrencesOfString:@".00" withString:@""].mutableCopy;

            [resultStr appendFormat:@"."];

            [resultStr appendFormat:@"%@", arr[1]];

           

            return resultStr;

        } else if (decimal.length >= 3) {

            //大于三位小数10.000...

            NSMutableString*resultStr = [arr.firstObject dividFormat].mutableCopy;

            resultStr =[resultStr stringByReplacingOccurrencesOfString:@".00" withString:@""].mutableCopy;

            NSString *str =[decimal substringToIndex:2];

            [resultStr appendString:@"."];

            [resultStr appendString:str];

           

            return resultStr;

       }

   }

   

    return @"";

}

 

#pragma mark - 判断是否是整型

- (BOOL)isPureInt:(NSString *)string{

    NSScanner* scan = [NSScannerscannerWithString:string];

    int val;

    return [scan scanInt:&val] && [scan isAtEnd];

}

 

#pragma mark - 判断是否是浮点型

- (BOOL)isPureFloat:(NSString *)string{

    NSScanner* scan = [NSScannerscannerWithString:string];

    float val;

    return [scan scanFloat:&val] && [scan isAtEnd];

}

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值