XML dosyalarından rakam okuyorum. Diğer sayılar virgülle ayırıcı (0,1111) ve nokta (0.1111) ile diğerleridir. Bu sayıları nasıl ayrıştıracağım ki sonunda istenen sonucu aldım? float.Parse(reader.Value, System.Globalization.CultureInfo.InvariantCulture);
kullanmayı denedim ama işe yaramıyor. Örneğin ben reader.Value = "0,01119703" var ve 1119703.0 olarak ayrıştırıldı.C# dizgeden ayrıştırma float
cevap
Aynı anda iki farklı ondalık ayırıcıyla çalışmanın mümkün olduğuna inanmıyorum. Sanırım herhangi bir virgüyü noktaya dönüştürmek için sadece Replace() kullanıyorum.
float.Parse(reader.Value.Replace(',', '.'), System.Globalization.CultureInfo.InvariantCulture);
olan bir dizi dizeleri olduğunu varsayalım. Bu yaklaşımla bir risk, sayıların 1000.00 –
biçiminde olması halinde olurdu. Bu biraz tehlikeli. "3,456.78" girerseniz, yukarıdaki kod muhtemelen "3.456.78" olarak değiştirilecek ve bu muhtemelen bir ayrıştırma hatasıyla sonuçlanacaktır. –
Bu bir seçenek değil. Kaynağın hiçbirini değiştiremem. – user579674
XML dosyalarında hangi biçimin kullanıldığını size söyleyen bir şey var mı? .NET'te, izin verilen iki ondalık ayırıcıya sahip olmak için yerleşik bir yol yoktur. Bir sayının hangi formatta olacağını belirten bir şey yoksa, her zaman dizenin bir nokta mı yoksa virgül mi içerdiğini ve ondalık ayırıcıyla bir NumberFormatInfo oluşturup oluşturmadığını kontrol edebilirsiniz. Tabii ki, bu sayılardan herhangi birinin bir binlik ayırıcı olarak bir periyodu veya virgülü olması durumunda işe yaramaz.
Bunlar küçük sayılardır, muhtemelen bin ayırıcı yoktur. Virgül veya nokta olup olmadığını nasıl kontrol edebilirim? Bu karakterleri içeriyorsa dizeyi kontrol etmem gerekiyor mu? – user579674
Hiçbir şey kontrol etmek zorunda değilsiniz, sadece Replace() işlevini kullanın. Değiştirilecek karakteri bulamazsa, orijinal dizeyi döndürür. Cevabımın içerdiği kodu görüyorum :-) – AHM
Bunun en büyük çözüm olduğundan emin değilsiniz, ancak bilinen bir dizi "Özel" sayı biçimine güvenebilirsiniz. Örneğin, iki özel sayı biçimleri (ya sıfırdan ya da bilinen bir biçimi dayalı çalışma) beyan gibi olabilir:
private static readonly NumberFormatInfo DecimalSeparatorFormat = new NumberFormatInfo { NumberDecimalSeparator = ".", NumberGroupSeparator = "," };
private static readonly NumberFormatInfo CommaSeparatorFormat = new NumberFormatInfo { NumberDecimalSeparator = ",", NumberGroupSeparator = "." };
Ve sonra bilinen kabul biçimleri kullanarak numarayı ayrıştırma deneyin:
if (!Single.TryParse(unparsedValue, NumberStyles.Float, DecimalSeparatorFormat, out parsedValue) && !Single.TryParse(unparsedValue, NumberStyles.Float, CommaSeparatorFormat, out parsedValue))
throw new FormatException("Number format not supported");
Bu, sınırlı sayıda bilinen biçime sahip olduğunuzu varsayar, eğer girdileriniz gerçekten herhangi bir kültürde olabilirse, o zaman harika bir çözüm bulma şansınız olmayabilir.
Bu yaklaşıma sahip tek kazanım, en azından basit bir dize yerine (bu geçersiz bir biçime neden olabilir) güvenmek yerine, destekleyebildiğiniz biçimlerde açıkça belirtmenizdir.
- 1. Açısal Sorun ayrıştırma Float
- 2. C# dizgeden parşöbe parse
- 3. preg_replace - dizgeden istenmeyen karakterleri dizgeden döndürmek için
- 4. C++ statik olarak haritayı başlatır <float, float [3]>
- 5. 'Float -> float' türü 'float' türüyle eşleşmiyor
- 6. Javascript Float + Float = Dize?
- 7. Dosya yolunu C yolundaki bir dizgeden alın C#
- 8. float
- 9. Float
- 10. Float
- 11. XML Ayrıştırma Hatası - C#
- 12. Ayrıştırma C++ kodu - CSCope
- 13. Kod ayrıştırma C#
- 14. C++ ayrıştırma int
- 15. C#/IronPython Interop ve "float" veri türü
- 16. Dize Float nesnesine dönüştürülür Objective-C
- 17. XmlDocument - dizgeden yükle?
- 18. Dizgeden dize kaldırın jquery
- 19. PHP ayrıştırma HTML etiketleri
- 20. Ayrıştırma .msg dosyasını kullanarak C#
- 21. C++ hexfloat derleme zamanı ayrıştırma
- 22. Ayrıştırma JSON POST isteği C#
- 23. C# sınıfındaki XML dizesini ayrıştırma?
- 24. xml ayrıştırma iphone, objektif C?
- 25. Float ve printf
- 26. Php'de maksimum float değeri
- 27. iPhone: Float
- 28. Neden TypeScript dizgeden numaraya dönüştürülmesine izin vermesin
- 29. Float to Dize biçim belirteci
- 30. JSON Nesnesi Oluşturulamadı Dizgeden Dize
Bunun nasıl ayrıştırılmasını istiyorsunuz? – soandos
Size böyle garip veriler kim veriyor? Görünüşe göre gerçek sorun kaynakta ... – Cameron
@soandos Float numarası olarak ayrıştırılmasını istiyorum. Aslında bu dize. – user579674