VB.net - 将字符串“”转换为“Double”类型无效

时间:2018-03-27 20:27:55

标签: vb.net

好的,我现在有些困难。我的代码成功地在我的工作计算机上运行,​​该计算机运行英语版本的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”这样的十进制数字。 我不希望任何逗号作为“小数点”可读。

1 个答案:

答案 0 :(得分:0)

您应该使用正确的读卡器获取来检索数据,例如:

While dr1.Read()
    ' No String -> Double conversion needed
    latitude1 = reader.GetDouble(reader.GetOrdinal("LAT")) 
    longitude1 = reader.GetDouble(reader.GetOrdinal("LONG"))
End While