1

我正在为运行带有 .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。

4

2 回答 2

2

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
于 2013-04-10T20:30:14.180 回答
1

看起来你的CurrentCulturehas.作为小数分隔符,而你试图用它来解析值,

试试看:

System.Threading.Thread.Current.CurrentCulture.NumberFormat.NumberDecimalSeparator = ","
Dim result As Double = Double.Parse(quantity)
于 2013-04-10T19:38:36.507 回答