我正在维护一个应用程序的条形码扫描器运行Windows Mobile与。net 2.0 SP 1和VB.NET。该应用程序使用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
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
看起来您的CurrentCulture
有.
作为小数分隔符,而您正试图用,
来解析值。
试试:
System.Threading.Thread.Current.CurrentCulture.NumberFormat.NumberDecimalSeparator = ","
Dim result As Double = Double.Parse(quantity)