/* * 处理一个数字加小数点的字符串,前面无0,保留两位。网上有循环截取的方法,如果数字过长,浪费内存,这个方法在优化内存的基础上设计的。 */ -(NSString*)getTheCorrectNum:(NSString*)tempString { //先判断第一位是不是 . ,是 . 补0 if ([tempString hasPrefix:@"."]) { tempString = [NSString stringWithFormat:@"0%@",tempString]; } //计算截取的长度 NSUInteger endLength = tempString.length; //判断字符串是否包含 . if ([tempString containsString:@"."]) { //取得 . 的位置 NSRange pointRange = [tempString rangeOfString:@"."]; NSLog(@"%lu",pointRange.location); //判断 . 后面有几位 NSUInteger f = tempString.length - 1 - pointRange.location; //如果大于2位就截取字符串保留两位,如果小于两位,直接截取 if (f > 2) { endLength = pointRange.location + 2; } } //先将tempString转换成char型数组 NSUInteger start = 0; const char *tempChar = [tempString UTF8String]; //遍历,去除取得第一位不是0的位置 for (int i = 0; i < tempString.length; i++) { if (tempChar[i] == '0') { start++; }else { break; } } //如果第一个字母为 . start后退一位 if (tempChar[start] == '.') { start--; } //根据最终的开始位置,计算长度,并截取 NSRange range = {start,endLength-start}; tempString = [tempString substringWithRange:range]; return tempString; }