vb.net Convert.ToDecimal不工作

时间:2015-07-16 20:34:33

标签: vb.net decimal

我正在编写一个读取gps坐标的程序。我得到一个字符串格式的gps坐标,如下所示:

42,9659  15,3167

然后我想将这些字符串转换为DECIMALS。在我的开发PC上它工作正常,但只要我将软件放在另一台PC上它就不会转换为十进制。它输出的值不带逗号,如下所示:

429659  153167

继承我的代码:

gpsLatDecimalString = gpsData(2).Substring(2, gpsData(2).Length - 2).Replace(".", ",")
gpsLongDecimalString = gpsData(4).Substring(3, gpsData(4).Length - 3).Replace(".", ",")

'LAT: 25.69953
'LONG: 28.23881

gpsLatDecimal = System.Convert.ToDecimal(gpsLatDecimalString)
gpsLongDecimal = System.Convert.ToDecimal(gpsLongDecimalString)

1 个答案:

答案 0 :(得分:4)

似乎你得到XXXXX(点)YYYYY形式的坐标,这可能是PC配置不同文化的操作系统的问题。

请勿尝试使用逗号替换该点,而是在调用IFormatProvider

时使用相应的Convert.ToDecimal
gpsLatDecimalString = gpsData(2).Substring(2, gpsData(2).Length - 2)
gpsLongDecimalString = gpsData(4).Substring(3, gpsData(4).Length - 3)

gpsLatDecimal = Convert.ToDecimal(gpsLatDecimalString, CultureInfo.InvariantCulture)
gpsLongDecimal = Convert.ToDecimal(gpsLongDecimalString, CultureInfo.InvariantCulture)

现在,在您的PC上(可能使用逗号作为小数点分隔符配置),通知转换器使用InvariantCulture来理解字符串,而在另一台PC上将点配置为小数点分隔符,是默认值,CultureInfo参数无效。