关于四舍五入,包含简单和复杂的算法

是在计算并清除缓存时需要四舍五入的,因为数据较小,逻辑处理起来不太复杂,如下:

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;
}


至此,小马述一家之言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值