字符串位置用“,”加倍,用“。”

问题描述 投票:0回答:2

我正在尝试将字符串中的位置转换为double,以便在地图上使用它。字符串位置的格式如下:

latString: "31,92002306867021"

使用:

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);

结果是错的:3,19200230686702E + 15

使用Convert.ToDouble(latString)给我数字没有"."

管理这种转换的正确方法是什么?

c# string xamarin double
2个回答
3
投票

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);

3
投票

似乎你在一些不同的文化中使用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);
© www.soinside.com 2019 - 2024. All rights reserved.