【发布时间】:2019-12-11 18:41:18
【问题描述】:
问题 1
在我的代码中,我需要验证一个数字(Double 或 Int)是否在该数字周围的特定范围内(具有指定的容差)。
例如,中心数为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,依此类推。
【问题讨论】:
-
除以 15,四舍五入到最接近的整数,然后再乘以 15。比较stackoverflow.com/q/27922406/1187415。
-
最接近是什么意思? 16的snap应该是什么?
-
@LeoDabus 16 应该对齐到 15
-
顺便说一句,
abs(unit - 15) <= tolerance -
@MartinR 成功了,谢谢!