是在计算并清除缓存时需要四舍五入的,因为数据较小,逻辑处理起来不太复杂,如下:
double a = 2.156;
NSLog(@"%f",round(a));
NSLog(@"%.2f",round(a));
NSLog(@"%f",round(a * 100) / 100);
NSLog(@"%.2f",round(a * 100) / 100);
控制台输出:
2.000000
2.00
2.160000
2.16
此时的要求是保留小数点后两位,所以做了如下处理,其中[CJCacheTool calculateCache]是计算缓存,返回值为单位是M的缓存大小,若想了解点击打开链接
self.cacheLabel.text = [NSString stringWithFormat:@"%.2fM",round([CJCacheTool calculateCache] * 100) / 100];
若想保留后三位,可:
NSLog(@"%.3f",round(a * 1000) / 1000);
其他一次类推,对比结果即可得出结论。
另,严谨来写,譬如以下的一种方法,思路建议来自于-浮华之人生,业务要求是:10000<=num<=100000,显示1.xx万,超过十万四舍五入后显示xx万
+ (NSString *)getNumStrWithNum:(NSInteger)num
{
NSString *str;
if (num >= 10000) {
double number = num / 10000.0;
str = [self ClearZero:[self rundomNum:number withPost:1]];
if (num >100000) {
str = [self ClearZero:[self rundomNum:[str doubleValue] withPost:0]];
}
str = [NSString stringWithFormat:@"%@万",str];
}else{
str = [NSString stringWithFormat:@"%zd",num];
}
return str;
}
+ (double)rundomNum:(double)num withPost:(int)post{
int powNum = pow(10, post);
return round(num*powNum)/powNum;
}
+ (NSString *)ClearZero:(double)num
{
NSMutableString *resultStr = [NSMutableString stringWithFormat:@"%lf",num];
for (NSInteger i=[resultStr length]-1; i>=0; i--) {
char c=[resultStr characterAtIndex:i];
switch (c) {
case '0':
[resultStr deleteCharactersInRange:NSMakeRange(i, 1)];
break;
case '.':
[resultStr deleteCharactersInRange:NSMakeRange(i, 1)];
goto end;
break;
default:
goto end;
break;
}
}
end:;
return resultStr;
}
至此,小马述一家之言。