美文网首页
iOS数字向上取整不足补零

iOS数字向上取整不足补零

作者: 迷了jiang | 来源:发表于2018-10-26 16:46 被阅读54次

    我司最近在做金融软件,需要绘制分时和K线图,在做Y轴指标的时候,需要将数值进行取整补零的运算。

    先看一下产品需求,Y轴刻度生成规则:中轴为0,取图内DIFF、DEA、STICK三项指标最高绝对值时点值前两位向上取5的最小倍数,剩下位数以0填充,后将该值2等分并分别在中轴上下标识刻度。例如当前图内最高时点值为-1623,则前两位16向上取5的最小倍数为20,取值为2000,2等分后刻度分别为2000、1000、0、-1000、-2000。

    后台返回的数值都是float型的,直接向上取整简单,调用ceilf()函数即可;

        NSInteger a = ceil(34.98071);
        NSLog(@"%ld",a); //输出35
    

    实现算法是

    - (NSInteger )generateMaxInterValue:(float)maxValue {
        if (maxValue<0) {
            maxValue = ABS(maxValue); //负数取绝对值
        }
        NSInteger maxInt = 0;
        NSString *maxValueStr = [NSString stringWithFormat:@"%f",maxValue]; //先转成字符串
        if ([maxValueStr containsString:@"."]) {
            NSArray *strArray = [maxValueStr componentsSeparatedByString:@"."];
            NSString *firstStr = [strArray firstObject];
            if (firstStr.length>1) { // 大于10的数值
                NSString *subStr = [maxValueStr substringWithRange:NSMakeRange(0, 2)];
                NSInteger subInt = subStr.intValue;
                maxInt = (subInt / 5 * 5 + 5) * pow(10, firstStr.length - 2);
            }else { //小于10的数值
                maxInt = (firstStr.integerValue / 5 * 5 + 5);
            }
        }
        return maxInt;
    }
    

    以上就是一个简单的算法,大家有什么更好的方案的话,欢迎讨论!

    相关文章

      网友评论

          本文标题:iOS数字向上取整不足补零

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