我正在创建一个函数,该函数根据自定义变量粒度将视图框架的CGFloat舍入为最接近的离散值。
例如,如果我的粒度(乘数)为0.25,则我试图创建一个函数,该函数接受输入0.3并返回0.25或3.89并返回4.00(接近0.25的倍数)。到目前为止,我已经找到了几篇有关如何舍入到最接近的小数的文章,但是在这种情况下它们似乎并不适用。
let x = 1.23556789
let y = Double(round(1000*x)/1000)
print(y) //This removes all decimals but three, but only seem to work with multiples of 10.
关于我该怎么做的任何想法?
谢谢!
答案 0 :(得分:5)
您可以使用与四舍五入到10的幂相同的方法。
如果要舍入到最接近的0.1,请先乘以10,四舍五入,然后除以10。如果要舍入到最接近的0.01,请乘以100,四舍五入,然后除以100。
在这里看到图案吗?您乘以除以的数字在粒度上始终为1!
因此,对于0.25的粒度,您需要乘以除以4:
print(round(0.3 * 4) / 4)
// or
print(round(0.3 / 0.25) * 0.25)
通常,给定一个granularity: Double
和一个要舍入的数字x: Double
,我们可以像这样对它进行舍入:
let rounded = round(x / granularity) * granularity
答案 1 :(得分:3)
对我来说它有效
用于将值四舍五入到 5 的倍数
var value: Double = 32.2
print("Value:", round(value / 5) * 5)
outPut = 值:30.0
类似地,将一个值四舍五入到 8 的倍数
var value: Double = 37.2
print("Value:", round(value / 8) * 8)
输出:值:40.0
等等……