保留或不保留两位小数,数字分割或不分割

@interface NSString (divideNum)


#pragma mark - 保留两位小数,只舍不入,三位一分割

- (instancetype)dividFormat;

#pragma mark - 不保留小数,只舍不入,三位一分割

- (instancetype)dividFormatNOPoint;

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

- (instancetype)decPointFormat;


@end



@implementation NSString (divideNum)


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

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

    if (num == nil) {

        return @"";

    }

    int count = 0;

    long long int a = num.longLongValue;

    while (a != 0)

    {

        count++;

        a /= 10;

    }

    NSMutableString *string = [NSMutableString stringWithString:num];

    NSMutableString *newstring = [NSMutableString string];

    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;

}


#pragma mark - 保留两位小数并且三位一分割

- (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;

    } else if (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 - 三位一分割不保留小数

- (instancetype)dividFormatNOPoint {

    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;

        

        return str;

    } else if (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;

            

            return reStr;

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

            //两位小数10.00

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

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

            

            return resultStr;

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

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

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

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

            

            return resultStr;

        }

    }

    

    return @"";

}



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

- (instancetype )decPointFormat {

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

        //防止不是数字的情况

        return @"--";

    }

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

    if (arr.count == 1) {

        // 整数:123

        NSMutableString *str = self.mutableCopy;

        [str appendString:@".00"];

        

        return str;

    } else if (arr.count == 2) {

        NSString *decimal = arr[1];

        if (decimal.length == 1) {

            //一位小数10.0

            NSMutableString *str = self.mutableCopy;

            [str appendString:@"0"];

            

            return str;

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

            //两位小数10.00

            

            return self;

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

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


            NSMutableString *str0 = arr[0].mutableCopy;

            NSMutableString *str1 = arr[1].mutableCopy;

            NSString *retStr = [str1 substringWithRange:NSMakeRange(0, 2)];

            [str0 appendString:@"."];

            [str0 appendString:retStr];

            

            return str0;

        }

    }

    

    return @"";

}


#pragma mark - 判断是否是整型

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

    NSScanner* scan = [NSScanner scannerWithString:string];

    int val;

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

}


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

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

    NSScanner* scan = [NSScanner scannerWithString:string];

    float val;

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

}


@end


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值