2015-12-17 20 views
5

XML dosyasından bazı x ve y koordinatlarını okuyorum.Convert.ToDouble neden Değeri faktör 1000'e değiştiriyor?

koordinatları yüzden bu 3.47, -1.54, .. ve benziyorsun. Ben

double x, y; 
x = Convert.ToDouble(reader["X"]); // X Value: 3.47 

tarafından çifte değişkene değer atamak zaman

Değer

Neden bu böyledir 3470.00 olur?

+9

Yanlış kültür ayarlarını kullanmalıyım? Convert.ToDouble (okuyucu ["x"], CultureInfo.InvariantCulture) 'ı deneyin –

cevap

3

Daha önce bahsedildiği gibi, sorun kültür ayarlarıdır. Eğer Convert sınıf kullanmamalısınız neden XML sabit kültür ile çalışmak gerekiyordu, işte bu, ama özel olarak hem yazma ve okuma dönüşümleri kapsadığını amaçla XmlConvert Class öngörülen (kolayca unutulabilir her görüşmeden, içinde CultureInfo.InvariantCulture geçen yapabilirsiniz rağmen) XML içeriği için gerekli.

Yani sizin durumda gerçekten

x = XmlConvert.ToDouble(reader["X"]); 
+0

En iyi cevap, teşekkürler! – ManuKaracho

11

Convert.ToDouble yöntem CurrentCulture ayarları varsayılan herhangiIFormatProviderkaynağı yoksa tarafından kullanır.

CurrentCulture, . ürününü NumberDecimalSeparator olarak kullanmaz gibi görünüyor, ancak muhtemelen NumberGroupSeparator olarak kullanıyor. dize bir çözüm olarak değil 3.4

3400 olarak çözümlenen yüzden sen zatenInvariantCulture sevdiği Convert.ToDouble yöntemin ikinci parametresinde bir NumberDecimalSeparator olarak . olan bir kültür kullanabilirsiniz bu. senin -1.54 Örneğin

double x; 
x = Convert.ToDouble("3.47", CultureInfo.InvariantCulture); // x will be 3.47 not 3470 

, sen kombine AllowLeadingSign ve AllowDecimalPoint stilleri kullanmak belirtmek gerekir. Ne yazık ki, Convert.ToDouble bir parametre olarak NumberStyles alır bir aşırı bulunmamaktadır. Bunun için

, bunun yerine double.Parse yöntemi kullanabilirsiniz.

double x; 
x = double.Parse("-1.54", NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint, 
       CultureInfo.InvariantCulture); // x will be -1.54 
İlgili konular