项目中有很多需要展示小数的地方,既要保留相应的位数,又要吧多余的0去掉
比如 :
2.00 显示2 2.0500 显示2.05,2.50 显示2.5
很多时候 我们使用 “%.2f”, 会使得结果会有两位小数,2.00; 2.05; 2.50
为了不显示后面的小数,实际上 可以用下面的方法,
[NSString stringWithFormat:@"%@",@(str.floatValue)];
同时为了能够支持保留位数,我是用下面的方式处理的
1.现将float 格式化 为 想要保留的位数,@"%.2f"
2.然后在使用NSNumber封装
3.在转换为NSString
以下是测试和结果
+ (void)floatFormat {
NSMutableArray *resultArr = [NSMutableArray array];
NSArray *nums = @[@"2",@"2.50",@"2.500",@"2.50034"];
for (NSString *numStr in nums) {
NSString *str = [NSString stringWithFormat:@"%.2f",numStr.floatValue];
str = [NSString stringWithFormat:@"%@",@(str.floatValue)];
[resultArr addObject:str];
}
NSLog(@"\n %@",resultArr);
}
结果
屏幕快照 2018-07-13 下午5.25.32.png
上述代码 针对一般情况其实已经满足了 但是对于float数字过大的的话 转化为NSString 会变为 科学计数如:123456789
str = [NSString stringWithFormat:@"%@",@(str.floatValue)];
1.23 e+8
因此 对上面的字符串进行 正则
- 现将float 按照保留的小数位 进行小数点确定,
然后在对结果进行验证
// 小数格式化去掉后面的0 n:保留小数后n位
+ (NSString *)floatRemoveOther:(CGFloat)f decimalMaxCount:(int)n {
// @“%.nf”
NSMutableString *dataFormat = [NSMutableString stringWithString:@"%."];
NSString *decimalCount = [NSString stringWithFormat:@"%d",n];
[dataFormat appendString:decimalCount];
[dataFormat appendString:@"f"];
NSString *str = [NSString stringWithFormat:dataFormat,f];
if ([str containsString:@"."]) {
NSRange range = [str rangeOfString:@"0+$" options:(NSRegularExpressionSearch)];
if(range.location != NSNotFound) {
str = [str stringByReplacingCharactersInRange:range withString:@""];
if ([str hasSuffix:@"."]) {
str = [str stringByReplacingOccurrencesOfString:@"." withString:@""];
}
}
}
return str;
}
上面的正则 本来想用".?0+$" 但是经测试 貌似不可以 因此才有了里面单独去除最后的小数点的步骤
网友评论