【发布时间】:2015-01-18 22:24:27
【问题描述】:
我需要在 SQL 数据库中选择 0 到 359.9 度的范围。
我的输入是中心角和范围的形式。 例如 center=100 range=50 会给我一个角度>75角度335。
因此我当前的算法是这样工作的:
minangle = center-range/2
maxangle = center+range/2
if minangle<0, then minangle += 360
if maxangle>0, then maxangle -=360
然后在我的查询中
if minangle<maxangle, I query angle>minangle AND angle<maxangle
if minangle>maxangle, I query angle>minangle OR angle<maxangle
这种方法似乎有点复杂。有更好的方法吗?
【问题讨论】:
-
使用模数运算。
(angle + range) % 360。其余的将是正确的 0->360 角度。 -
stackoverflow.com/questions/9138790/cant-use-modulus-on-doubles 。对于浮点数和双精度数,请使用 fmod。
-
这有助于 +360 -360 逻辑。我真的希望有一些方法来避免 (minangle>maxangle) 和改变逻辑