我遇到了SQL查询的问题,我将其缩小到以下代码
SELECT ACOS( (SIN(PI()* 52.9519918465976/180)*SIN(PI()* 52.9519918465976/180))+(COS(PI()* 52.9519918465976/180)*cos(PI()* 52.9519918465976/180)*COS(PI()* -1.14304013581239/180-PI()* -1.14304013581239/180))) AS test
我收到以下错误消息'发生了无效的浮点运算'
可以看看问题是什么?
提前致谢
答案 0 :(得分:5)
ACOS()
中的结果大于1
,而不是1.00000001
。
那是因为浮点不准确。例如,它可能是1
。把它放在SELECT ACOS(
(SIN(PI()* 52.9519918465976/180.0)* SIN(PI()* 52.9519918465976/180.0))
+ (COS(PI()* 52.9519918465976/180)*cos(PI()* 52.9519918465976/180.0)*COS(PI()* -1.14304013581239/180.0-PI()* -1.14304013581239/180.0))
- 0.0000001
)
之下,就像这样:
{{1}}
答案 1 :(得分:0)
我正在使用ACOS计算地理位置之间的距离。减去“-0.0000001”足以使我的结果有些偏斜。因此,我改为使用MIN函数(如Craig的posted here):
cx_Oracle
通过这种方式,可以精确计算介于0和1之间的浮点数的ACOS。