我正在尝试将字符串中的位置转换为double,以便在地图上使用它。字符串位置的格式如下:
latString: "31,92002306867021"
使用:
double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
结果是错的:3,19200230686702E + 15
使用Convert.ToDouble(latString)
给我数字没有"."
管理这种转换的正确方法是什么?
invariant culture is associated with the English culture因此使用.
作为小数分隔符。 ,
将被解释为千位分隔符。
如果你传入一个使用逗号的文化(例如nl-NL
),它将起作用:
double lat = Convert.ToDouble("31,1234", CultureInfo.CreateSpecificCulture("nl-NL"));
如果你绝对确定输入字符串只能包含有效的纬度/经度(即数字永远不会超过1,000),那么你也可以使用字符串替换:
double lat = Convert.ToDouble("31,1234".Replace(',', '.'), CultureInfo.InvariantCulture);
似乎你在一些不同的文化中使用latString
,它使用,
作为千分隔符,在转换为浮点时被忽略:
"31,92002306867021" -> 3192002306867021 -> 3.19200230686702E+15
首先,检查您当前的文化,它可能看起来它使用,
作为小数分隔符:
string latString = "31,92002306867021";
// Current culture
double result = Convert.ToDouble(latString);
如果没有,您可以尝试用当前小数分隔符替换,
:
string latString = "31,92002306867021";
// be careful and culture specific: naive
// latString.Replace(",", ".")
// will cause problems with some cultures
// (e.g. ru-Ru which uses "." as a thousand separator)
string value = latString.Replace(",",
CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
double result = Convert.ToDouble(value);