我正在维护运行带有.NET 2.0 SP 1和VB.NET的Windows Mobile的条形码扫描程序的应用程序。该应用程序使用PL / SQL与Oracle数据库集成。
我有一个SQL查询,它返回一个DataTable,其中包含要使用扫描程序选择的项目列表,有时数量是十进制数。
问题是我无法将0,8等十进制数字从字符串转换为double。我尝试了以下所有方法:
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。
答案 0 :(得分: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
答案 1 :(得分:1)
您的CurrentCulture
似乎有.
作为小数点分隔符,而您尝试使用,
解析值。
试试:
System.Threading.Thread.Current.CurrentCulture.NumberFormat.NumberDecimalSeparator = ","
Dim result As Double = Double.Parse(quantity)