iOS数字向上取整不足补零

2018-10-26  本文已影响54人  迷了jiang

我司最近在做金融软件,需要绘制分时和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;
}

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

上一篇下一篇

猜你喜欢

热点阅读