英捷十进制问题

时间:2015-09-05 17:46:45

标签: .net vb.net sqlite localization decimal

我确定此问题之前已得到解答,但有时我需要用自己的话来理解答案。

我最近遇到了一个问题,即在计算机上使用捷克语的人无法运行我的应用程序,我使用美国英语。

我在SQLite数据库中将一些十进制值保存为字符串。我猜捷克语不喜欢我的小数(1.50),因为它在尝试将其从字符串解析为十进制时崩溃。它只是没有将1.50识别为小数的正确格式。

我希望能够轻松解决问题,有人建议强制本地化文化进入美国。我做了一些研究并且非常困惑,我希望有人能帮助我理解如何解决这个问题。

谢谢

加载SQLite数据:

    Public Shared Sub LoadAutoBetting()
    Dim SQLstr As String = "Select * FROM AutoBetting"
    Dim connection As String = "Data Source=utb.db;Version=3"
    Dim SQLConn As New SQLiteConnection
    Dim SQLcmd As New SQLiteCommand
    Dim SQLdr As SQLiteDataReader
    SQLConn.ConnectionString = connection
    SQLConn.Open()
    SQLcmd.Connection = SQLConn
    SQLcmd.CommandText = SQLstr
    SQLdr = SQLcmd.ExecuteReader()
    While SQLdr.Read()
        Bets.autoMulti = SQLdr(0)
    End While
    SQLdr.Close()
    SQLConn.Close()
End Sub

Bets.autoMulti = SQLdr(0)弹出的错误autoMulti是一个小数,SQLdr(0)是一个字符串(1.50),这是我在创建表时插入的默认值。

2 个答案:

答案 0 :(得分:0)

我的经验是vb严重依赖于windows区域设置。可能它期望一个','作为小数分隔符。这不仅仅是捷克共和国的情况。这在欧洲很常见。使用日期格式(dd / mm / YYYY,dd.mm.YYYY,mm / dd / YYYY,YYYY-mm-dd,...)时会弹出同样的问题。

您可以根据区域设置编写自己的函数来解析sql查询结果中的字符串。

答案 1 :(得分:-1)

将文化显式化,包括将小数写入字符串以及将其读回时。好的选择可能是“InvariantCulture”,实际上是美国。

当您依赖“当前”文化(在PC上)时,您会遇到麻烦,因为您无法知道未来潜在用户可能会选择什么。