iOS 小数点精度问题处理

时间:2022-11-06 19:31:10

实际开发中有时候经常会需要去处理小数点精度问题,如果是整数保留整数,如果有小数则保留不为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()方法来实现