【问题标题】:English-Czech Decimal Problems英语-捷克语小数问题
【发布时间】:2015-09-05 17:46:44
【问题描述】:

我确定这个问题之前已经回答过,但有时我需要用自己的话问它才能理解答案。

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

我在 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),这是我在创建表时插入的默认值。

【问题讨论】:

  • 不要强行翻译成英文,根据当地文化进行解析——展示你在做什么
  • Plutonix,我用加载数据的代码更新了帖子,删除了不相关的代码。你还需要看什么吗?
  • 我应该提到我已经尝试过Decimal.Parse(SQLdr(0)) & CDec(SQLdr(0))
  • autoMulti is a decimal, SQLdr(0) is a string(1.50) 实际情况引出了更多问题。 A)听起来 Option Strict 已关闭,因为不允许将字符串分配给 Decimal B)如果值为 Decimal,为什么将其保存为字符串? Decimal.TryParse(strD, NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, dec) 这将解析(或尝试)尊重本地计算机文化设置 - 它允许 . 用于英语,, 用于世界其他大部分地区。同样,如果您保存为数字,则不必解析它
  • Josh,sqlite3 支持 REAL 数据类型来存储这种数据。

标签: .net vb.net sqlite localization decimal


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在将小数写入字符串和读回字符串时,都要明确文化。不错的选择可能是 "InvariantCulture" ,实际上是美国。

    当您依赖“当前”文化(在 PC 上)时,您就是在自找麻烦,因为您不知道未来的潜在用户会选择什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多