发生了无效的浮点运算

时间:2012-06-20 09:45:37

标签: sql-server-2008

我遇到了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

我收到以下错误消息'发生了无效的浮点运算'

可以看看问题是什么?

提前致谢

2 个答案:

答案 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。