iOS 小数点精度问题处理

实际开发中有时候经常会需要去处理小数点精度问题,如果是整数保留整数,如果有小数则保留不为0的的小数,最大2位小数
eg:
2.013 ---> 2.01
2.0 ---> 2
2.10 ---> 2.1
2.149 ---> 2.15
2.00000000009 ---> 2 (丢失精度的情况经常会遇到)

如果像以上情况,末尾为0则直接显示整数,如果不为0,则显示有效位小数,最大显示2位

这里的解决方法是利用fmodf对1取余的方式每次可以获取到小数位
eg:
1.0%1 = 0
1.10%1 = 0.1
1.00000009%1 = 0.00000009

综合上面的例子我们可以总结出下面的一个方法,只需要将小数传入即可获取到符合规范的小数位

- (NSString *)formatFloat:(float)f{
    if (fmodf(f, 1)==0) { //无有效小数位
        return [NSString stringWithFormat:@"%.0f",f];
    } else if (fmodf(f*10, 1)==0) {//如果有一位小数点
        return [NSString stringWithFormat:@"%.1f",f];
    } else {//如果有两位或以上小数点
        return [NSString stringWithFormat:@"%.2f",f];
    }
}

需要主要的是iOS中的[NSString stringWithFormat:@"%.1f",f]这种方式取得的小数是四舍五入的小数,并且是向上取整的,如果需要向下取整则可以floor()方法来实现

原文地址:https://www.cnblogs.com/qqcc1388/p/10303546.html