好的,我现在有些困难。我的代码成功地在我的工作计算机上运行,该计算机运行英语版本的Windows,而我的家用计算机,它不起作用,它运行法语版的Windows。
简单来说,
当我使用逗号而不是十进制数字点时,我的家用电脑可以理解我的代码。
当我使用点而不是逗号来表示十进制数时,我的工作计算机可以理解我的代码。
Public Class Form1
Dim provider As String
Dim dataFile As String
Dim connString As String
Public myConnection As OleDbConnection = New OleDbConnection
Public dr1 As OleDbDataReader
Dim latitude1 As Double
Dim longitude1 As Double
Dim str1 As String
Public dr2 As OleDbDataReader
Dim latitude2 As Double
Dim longitude2 As Double
Dim str2 As String
Public Function distance(ByVal lat1 As Double, ByVal lon1 As Double, ByVal lat2 As Double, ByVal lon2 As Double, ByVal unit As Char) As Double
Dim theta As Double = lon1 - lon2
Dim dist As Double = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta))
dist = Math.Acos(dist)
dist = rad2deg(dist)
dist = dist * 60 * 1.1515
If unit = "K" Then
dist = dist * 1.609344
ElseIf unit = "N" Then
dist = dist * 0.8684
End If
Return dist
End Function
Private Function deg2rad(ByVal deg As Double) As Double
Return (deg * Math.PI / 180.0)
End Function
Private Function rad2deg(ByVal rad As Double) As Double
Return rad / Math.PI * 180.0
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
myConnection.Open()
str1 = "SELECT * FROM airport WHERE (ICAO = '" & TextBox1.Text & "')"
Dim cmd1 As OleDbCommand = New OleDbCommand(str1, myConnection)
dr1 = cmd1.ExecuteReader
While dr1.Read()
latitude1 = dr1("LAT").ToString()
longitude1 = dr1("LONG").ToString()
End While
str2 = "SELECT * FROM airport WHERE (ICAO = '" & TextBox2.Text & "')"
Dim cmd2 As OleDbCommand = New OleDbCommand(str2, myConnection)
dr2 = cmd2.ExecuteReader
While dr2.Read()
latitude2 = dr2("LAT").ToString()
longitude2 = dr2("LONG").ToString()
End While
myConnection.Close()
Label3.Text = Math.Round(distance(latitude1, longitude1, latitude2, longitude2, "N"), 2) & " NM"
Label3.Left = (Label3.Parent.Width / 2) - (Label3.Width / 2)
End Sub
我希望我的代码能够在每台Windows计算机上读取像“48.0532989502”这样的十进制数字。 我不希望任何逗号作为“小数点”可读。
答案 0 :(得分:0)
您应该使用正确的读卡器获取来检索数据,例如:
While dr1.Read()
' No String -> Double conversion needed
latitude1 = reader.GetDouble(reader.GetOrdinal("LAT"))
longitude1 = reader.GetDouble(reader.GetOrdinal("LONG"))
End While