我司最近在做金融软件,需要绘制分时和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;
}
以上就是一个简单的算法,大家有什么更好的方案的话,欢迎讨论!
网友评论