C# 带“,”的字符串位置&引用;用“加倍”&引用;

C# 带“,”的字符串位置&引用;用“加倍”&引用;,c#,string,xamarin,double,C#,String,Xamarin,Double,我正在尝试将一个位置从字符串转换为双精度,以便在地图上使用它。 字符串位置的格式如下: latString: "31,92002306867021" double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture); 使用: double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture); 结果是错误的:319200230686702E+

我正在尝试将一个位置从字符串转换为双精度,以便在地图上使用它。 字符串位置的格式如下:

latString: "31,92002306867021"
double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
使用:

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
结果是错误的:319200230686702E+15

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
使用
Convert.ToDouble(latString)
给我不带
的号码“

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
管理该类型转换的正确方法是什么?

并因此使用
作为十进制分隔符。
将被解释为千位分隔符

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
如果您传入使用逗号的区域性(例如,
nl-nl
),它将起作用:

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
double lat = Convert.ToDouble("31,1234", CultureInfo.CreateSpecificCulture("nl-NL"));
如果您完全确定输入字符串只能包含有效的纬度/经度(即数字永远不会超过1000),则您也可以使用字符串替换:

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
double lat = Convert.ToDouble("31,1234".Replace(',', '.'), CultureInfo.InvariantCulture);
因此,使用
作为十进制分隔符。
将被解释为千位分隔符

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
如果您传入使用逗号的区域性(例如,
nl-nl
),它将起作用:

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
double lat = Convert.ToDouble("31,1234", CultureInfo.CreateSpecificCulture("nl-NL"));
如果您完全确定输入字符串只能包含有效的纬度/经度(即数字永远不会超过1000),则您也可以使用字符串替换:

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
double lat = Convert.ToDouble("31,1234".Replace(',', '.'), CultureInfo.InvariantCulture);

在某些不同的区域性中,似乎有
latString
,它使用
作为千位分隔符,在转换为浮点时被忽略:

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
  "31,92002306867021" -> 3192002306867021 -> 3.19200230686702E+15
首先,检查您当前的区域性,它很可能使用
作为小数分隔符:

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
  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);
如果没有,您可以尝试用当前的十进制分隔符替换

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
  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);

在某些不同的区域性中,似乎有
latString
,它使用
作为千位分隔符,在转换为浮点时被忽略:

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
  "31,92002306867021" -> 3192002306867021 -> 3.19200230686702E+15
首先,检查您当前的区域性,它很可能使用
作为小数分隔符:

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
  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);
如果没有,您可以尝试用当前的十进制分隔符替换

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);
  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);

你如何确定结果是错误的?如果对
Convert.ToDouble
的调用实际上成功无误,并且您可以在计算中使用该原语
double
,那么无论您在控制台上看到什么,它都可以工作。使用Convert.ToDouble(latString)给我一个没有“.”的数字。位置可能类似于31.37893您如何确定这一点?同样,您从
控制台中看到的内容。WriteLine
或日志中的内容不一定反映
double
中存储的内容。我在中间控制台中看到,您从哪里获得输入?你能把它规范化为用“.”代替“,”吗?有特定于文化的输入意味着你需要适应这种文化。你如何确定结果是错误的?如果对
Convert.ToDouble
的调用实际上成功无误,并且您可以在计算中使用该原语
double
,那么无论您在控制台上看到什么,它都可以工作。使用Convert.ToDouble(latString)给我一个没有“.”的数字。位置可能类似于31.37893您如何确定这一点?同样,您从
控制台中看到的内容。WriteLine
或日志中的内容不一定反映
double
中存储的内容。我在中间控制台中看到,您从哪里获得输入?你能把它规范化为用“.”代替“,”吗?具有特定于区域性的输入意味着您需要适应该区域性。说明:+1,但解决方案。。。我不确定将输入规范化为使用“.”是否更好。@Fildor将添加它。解释:+1,但解决方案。。。我不确定将输入规范化为使用“.”是否更好。@Fildor将添加这一点。