我有一条线Dim SapGuiAuto, application, connection, session,SapGui
document.write(" SapGuiAuto " & SapGuiAuto &"<br/>")
sOrderNumber = Replace(item3 , "[ss]", " ") 'espace
document.write(" sOrderNumber " & sOrderNumber &"<br/>")
' Gestion des erreurs
On Error Resume Next
' fin Ajout -------------------------------------------------
set WshShell = CreateObject("WScript.Shell")
document.write("WshShell " & WshShell &"<br/>" )
Set proc = WshShell.Exec("C:\Program Files
(x86)\SAP\FrontEnd\SAPgui\saplogon.exe")
Do While proc.Status = 0
WScript.Sleep 100
Loop
Set SapGui = GetObject("SAPGUI")
document.write(" SapGui " & SapGui &"<br/>")
Set application = SapGui.GetScriptingEngine
document.write(" application" & application &"<br/>")
Set connection = application.Openconnection("Test SAP", True)
document.write(" Connection " & connection &"<br/>")
Set session = connection.Children(0)
document.write(" session " & session &"<br/>")
与另一条线@a
相交。当我获取交点并检测它是否与@b相交时,它返回false
@b
答案 0 :(得分:6)
可以归结为在计算中处理浮点数时应使用的一般方法。您不应该将相等性比较与浮点数一起使用,例如if a == b
,而应将它们与在您的应用程序域中有意义的epsilon精度进行比较,例如if abs(a-b) < 1e-8
。
从概念上讲,它类似于执行一些非平凡的计算,例如:
double a = 2.0;
a = sqrt(a);
a = a*a;
,然后期望if a == 2.0
返回true而不是写if abs(a-2.0) < 1e-8
。
SQL Server中的几何点用浮点数表示,这是不精确的。
DECLARE @intersectionPoint geometry = @a.STIntersection(@b)
尽最大可能计算交点,但永远不会精确。
因此,像@b.STIntersects(@intersectionPoint)
这样的表达式在概念上等同于相等比较。它等效于if @b.STDistance(@intersectionPoint) == 0
,仅在少数特殊情况下才适用。
您应该改用@b.STDistance(@intersectionPoint) < 1e-8
之类的东西。
答案 1 :(得分:4)
这似乎是舍入错误。如果我在您的代码中添加以下内容:
SELECT @b.STDistance(@intersectionPoint);
我得到≈3飞米。除非您以原子级进行测量,否则它可能足以被视为“在线”。
出于好奇,您实际上想解决什么问题?