@interface NSString (divideNum)
#pragma mark - 保留两位小数,只舍不入,三位一分割
- (instancetype)dividFormat;
#pragma mark - 不保留小数,只舍不入,三位一分割
- (instancetype)dividFormatNOPoint;
#pragma mark - 保留两位小数,只舍不入,不分割
- (instancetype)decPointFormat;
@end
@implementation NSString (divideNum)
#pragma mark - 整数进行分割(例如:12345 -》12,345)
- (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