Windows Mobile上VB.NET中的类型转换

Windows Mobile上VB.NET中的类型转换,.net,vb.net,windows-mobile,type-conversion,.net,Vb.net,Windows Mobile,Type Conversion,我正在使用.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(qua

我正在使用.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。

看起来您的
CurrentCulture
作为十进制分隔符,而您正试图用
来解析值

试试看:

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

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
如果您希望设备的当前设置更具区域设置意识,则可以使用以下内容更安全:

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

Compact Framework.com中没有
Thread.Current.CurrentCulture
。CF中没有当前文化!我在代码和SQL中使用了一些分隔符,现在它可以工作了。