美文网首页
小数点 后面的0不显示

小数点 后面的0不显示

作者: 暖羊羊_d603 | 来源:发表于2018-07-13 17:39 被阅读0次

项目中有很多需要展示小数的地方,既要保留相应的位数,又要吧多余的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
因此 对上面的字符串进行 正则

  1. 现将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+$" 但是经测试 貌似不可以 因此才有了里面单独去除最后的小数点的步骤

相关文章

网友评论

      本文标题:小数点 后面的0不显示

      本文链接:https://www.haomeiwen.com/subject/hmrspftx.html