C#:将数组中的字符串转换为双点分隔符

时间:2016-12-07 10:26:47

标签: c# visual-studio xamarin double separator

我正在Visual Studio中开发一个Xamarin Android应用程序。

我有一个像这样的GPS坐标字符串数组:

*string[] DeviceLocations = { "23.2342;32.4544", "7.4321;9.5431", "12.4223;-23.3434" };*

为了能够将它们传递到我的谷歌地图,如标记,它们必须转换为双倍值 - 使用“。”作为分隔符。

我尝试了几种不同的方法,包括:

1)

Double lat = Convert.ToDouble(splitPos[0].ToString(), new CultureInfo("en-US"));

2)

NumberFormatInfo info = new NumberFormatInfo();
info.NumberGroupSeparator = ".";
info.NumberDecimalSeparator = ".";
Double lat = Double.Parse(splitPos[0].ToString(), info);

3)

Double lat = XmlConvert.ToDouble(splitPos[0].ToString());

4)

Double lat = double.Parse(splitPos[1].ToString(), CultureInfo.InvariantCulture);

但是他们所有人都用“,”而不是“。”返回“lat”。

任何人都有任何其他的想法,我可以尝试???我的想法已经不多了。

2 个答案:

答案 0 :(得分:3)

一个正确的方法是:

private static readonly CultureInfo USCULTURE = new CultureInfo("en-US");

// Go over all items
foreach (string latlon in DeviceLocations)
{
    // Get the split result
    string[] coordinates = latlon.Split(';');

    // Lat is first item of split array, Lon is second item
    double lat = Convert.ToDouble(coordinates[0], USCULTURE);
    double lon = Convert.ToDouble(coordinates[0], USCULTURE);

    // Now do something with the double values
    ...
}

我不知道你的意思所有人都会回复" lat"与","而不是"。" ,但是双倍只是一个双倍。只有当输出时,才会出现小数点分隔符。那么输出数字的系统可能有,作为小数分隔符吗?

在这种情况下,您需要强制输出使用美国格式:

string outputtableLat = lat.ToString("G", USCULTURE);
string outputtableLon = lon.ToString("G", USCULTURE);

答案 1 :(得分:1)

以下是:

public static IEnumerable<Tuple<double,double>> ParseCoordinates(this IEnumerable<string> points, IFormatProvider formatProvider)
{
    foreach (var point in points)
    {
        var coordinates = point.Split(';');
        double x = 0;
        double y = 0;

        if (!double.TryParse(coordinates[0], NumberStyles.Number, formatProvider, out x))
        {
            x = double.NaN;
        }

        if (!double.TryParse(coordinates[1], NumberStyles.Number, formatProvider, out y))
        {
            y = double.NaN;
        }

        yield return new Tuple<double, double>(x, y);
    }
}

如果解析失败,我冒昧地返回double.NaN。不确定这在您的方案中是否有效,请相应更改,但请确保您 有办法从格式错误的数据中恢复。

你可以这样使用它:

string[] deviceLocations = { "23.2342;32.4544", "7.4321;9.5431", "12.4223;-23.3434" };
var coordinates = deviceLocations.ParseCoordinates(new CultureInfo("en-US"));

现在您已经解析了坐标。如果要在任何特定文化中输出它们,只需使用IFormattable界面:

Console.WriteLine(string.Join(Environment.NewLine, coordinates.Select(c => $"Lat: {c.Item1.ToString(CultureInfo.InvariantCulture)}; Long: {c.Item2.ToString(CultureInfo.InvariantCulture)}")));