我正在编写一个读取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)
答案 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
参数无效。