gpt4 book ai didi

ios - swift :围绕给定数字创建范围

转载 作者:行者123 更新时间:2023-12-01 19:38:03 30 4
gpt4 key购买 nike

问题1

在我的代码中,我需要验证数字(DoubleInt)是否落在该数字周围的特定范围内(具有指定的容差)。

例如,中心编号为15,公差为5,因此范围为:10-20

13、18、19都属于该范围。

目前,我正在通过以下方式进行检查:

if (15 - unit)...(15 + unit) ~= accentedMinute {
accentedMinute = 15
} else if (30 - unit)...(30 + unit) ~= accentedMinute {
accentedMinute = 30
} else {
accentedMinute = 45
}

我有兴趣使用一种更简单的方法来解决此问题,例如:
if Range(center: 15, tolerance: unit) ~= accentedMinute {
accentedMinute = 15
} else if Range(center: 30, tolerance: unit) ~= accentedMinute {
...

问题2

也许可以进一步简化此方法,最终目标是将数字“捕捉”到某个范围内最接近的数字。

例如,要捕捉的数字集为 0, 15, 30, 45, 60 (snaps to 0)
给定一个数字 13,它应该对齐 15,依此类推。

最佳答案

关于您的问题,您可以扩展Range / ClosedRange并创建一个自定义初始化程序,使其表现为所需的行为:

extension Range where Bound: AdditiveArithmetic & ExpressibleByIntegerLiteral {
init(center: Bound, tolerance: Bound) {
self.init(uncheckedBounds: (lower: center - tolerance, upper: center + tolerance + 1))
}
}
extension ClosedRange where Bound: AdditiveArithmetic {
init(center: Bound, tolerance: Bound) {
self.init(uncheckedBounds: (lower: center - tolerance, upper: center + tolerance))
}
}

关于您的关于舍入的第二个问题,如注释中已经提到的,您可以将值乘以 n,将其舍入,然后再次除以 n:
extension FloatingPoint {
func rounded(to value: Self, roundingRule: FloatingPointRoundingRule = .toNearestOrAwayFromZero) -> Self { (self/value).rounded(roundingRule) * value }
}
16.rounded(to: 15)  // 15

关于ios - swift :围绕给定数字创建范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59292120/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com