2016-12-07 57 views
0

我正在Visual Studio中開發Xamarin Android應用程序。C#:將字符串從數組轉換爲雙精度分隔符

我有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」。

任何人有任何其他的想法,我可以嘗試?我正在用盡想法。

+0

你如何得到'splitPos'? – ThePerplexedOne

+0

我在split循環中獲取splitPos,如下所示:_string [] splitPos = DeviceLocations [i] .Split(';'); _ – SorenA

+0

問題不在於解析我相信的數字。問題在於輸出號碼時。那就是你需要指定的格式。使用'CultureInfo'或'NumberFormatInfo'。 –

回答

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

下面會做:

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)}"))); 
相關問題