如何根据给定值向下取整到最近百位/千位设置图表Y轴最大值?
优化Y轴顶部数值计算函数
需求说明
给定一个数值,返回其所在整百区间的起始值:
- 100-199.9 → 返回100
- 200-299.9 → 返回200
- ...
- 10000-10099.9 → 返回10000(以此类推)
原繁琐实现
private func chartTopValueFromGivenValue(givenValue: Float) -> Float { let startNumber:Float = 100.0 let endNumber:Float = 199.9 let numberRange = startNumber...endNumber if numberRange.contains(barsValueMax) { return 100.0 } let startNumber2:Float = 200.0 let endNumber2:Float = 299.9 let numberRange2 = startNumber2...endNumber2 if numberRange2.contains(barsValueMax) { return 200.0 } let startNumber3:Float = 300.0 let endNumber3:Float = 399.9 let numberRange3 = startNumber3...endNumber3 if numberRange3.contains(barsValueMax) { return 300.0 } let startNumber4:Float = 300.0 let endNumber4:Float = 499.9 let numberRange4 = startNumber4...endNumber4 if numberRange4.contains(barsValueMax) { return 400.0 } let startNumber5:Float = 500.0 let endNumber5:Float = 599.9 let numberRange5 = startNumber5...endNumber5 if numberRange5.contains(barsValueMax) { return 500.0 } let startNumber6:Float = 600.0 let endNumber6:Float = 699.9 let numberRange6 = startNumber6...endNumber6 if numberRange6.contains(barsValueMax) { return 600.0 } return 0.0 }
优化解法
利用数学运算替代重复的区间判断,一行核心逻辑即可实现需求,同时修复原代码中的区间错误:
private func chartTopValueFromGivenValue(givenValue: Float) -> Float { guard givenValue >= 100 else { return 0.0 } return floor(givenValue / 100) * 100 }
逻辑说明
- 先判断数值是否小于100,符合则直接返回0(和原代码逻辑一致)
- 将给定值除以100后,用
floor()取向下取整(舍去小数部分) - 再将结果乘回100,得到对应整百区间的起始值
示例验证
- 输入150 → 150/100=1.5 → floor后1 → 1*100=100
- 输入299.9 → 299.9/100=2.999 → floor后2 → 2*100=200
- 输入10099.9 → 10099.9/100=100.999 → floor后100 → 100*100=10000
- 输入500 → 500/100=5 → floor后5 → 5*100=500
内容的提问来源于stack exchange,提问作者I Don't Tell
相关产品推荐
相关产品推荐

