【问题标题】:Type convertion in VB.NET on Windows MobileWindows Mobile 上 VB.NET 中的类型转换
【发布时间】:2013-04-02 19:43:01
【问题描述】:

我正在为运行带有 .NET 2.0 SP 1 和 VB.NET 的 Windows Mobile 的条码扫描器维护一个应用程序。该应用程序使用 PL/SQL 与 Oracle 数据库集成。

我有一个 SQL 查询,它返回一个 DataTable,其中包含要使用扫描仪挑选的项目列表,有时数量是十进制数。

问题是我无法将十进制数(例如 0,8)从字符串转换为双精度数。我已经尝试了以下所有方法:

Dim quantity As String = "0,8"
Dim result As Double = Convert.ToDouble(quantity)
Dim result As Double = Double.Parse(quantity)
Dim result As Double = CDbl(quantity)

在所有情况下,结果都是 8 而不是 0,8。

【问题讨论】:

    标签: .net vb.net windows-mobile type-conversion


    【解决方案1】:

    CF 的解析能力有限。我假设设备文化设置为 en-US,在这种情况下,您可以执行以下操作:

    Dim quantity As String = "0,8"
    Dim result As Double = Double.Parse(quantity.Replace(',', '.'))
    

    如果您希望它在设备的当前设置方面更能感知区域设置,您可以通过以下方式更安全:

    Dim quantity As String = "0,8"
    Dim result As Double
    
    If CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == "."
        result = Double.Parse(quantity.Replace(',', '.'))
    Else
        result = Double.Parse(quantity)
    End If
    

    【讨论】:

      【解决方案2】:

      看起来您的 CurrentCulture. 作为小数分隔符,而您正尝试使用 , 解析值。

      试试看:

      System.Threading.Thread.Current.CurrentCulture.NumberFormat.NumberDecimalSeparator = ","
      Dim result As Double = Double.Parse(quantity)
      

      【讨论】:

      • Compact Framework 中没有Thread.Current.CurrentCulture
      • 没错。 CF 中没有 CurrentCulture!我在代码和 SQL 中使用了分隔符,现在它可以工作了。
      猜你喜欢
      • 2012-04-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多