Swift:将浮点四舍五入到最接近的自定义乘数

时间:2019-05-05 12:14:43

标签: swift

我正在创建一个函数,该函数根据自定义变量粒度将视图框架的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.

关于我该怎么做的任何想法?

谢谢!

2 个答案:

答案 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
等等……