代码之家  ›  专栏  ›  技术社区  ›  doxsi

带“,”的字符串位置到带“.”的双精度字符串位置

  •  0
  • doxsi  · 技术社区  · 7 年前

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

    latString: "31,92002306867021"
    

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

    结果是错误的: 319200230686702E+15电话

    Convert.ToDouble(latString) 没有 "."

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

    2 回复  |  直到 7 年前
        1
  •  3
  •   Knelis JeffRSon    7 年前

    这个 invariant culture is associated with the English culture 因此使用 . 作为小数点分隔符。这个 ,

    如果您传入的文化中使用逗号(例如。 nl-NL ),它将工作:

    double lat = Convert.ToDouble("31,1234", CultureInfo.CreateSpecificCulture("nl-NL"));
    

    如果您绝对确定输入字符串只能包含有效的纬度/经度(即数字永远不会超过1000),那么您也可以使用字符串替换:

    double lat = Convert.ToDouble("31,1234".Replace(',', '.'), CultureInfo.InvariantCulture);
    
        2
  •  3
  •   Dmitrii Bychenko    7 年前

    看来你有 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);