Nokta sayısı ayrıştırma Kayan: Yakalama tüm algoritma var mı?

oy
52

Çok kültürlü programlama eğlenceli bölümlerden biri sayı biçimleri olduğunu.

  • Amerikalılar 10,000.50 kullanmak
  • Almanlar 10.000,50 kullanmak
  • Fransız kullanım 10 000,50

İlk yaklaşım ben bir ayırıcı karşılaşana kadar, geriye doğru ayrıştırmak, dize almak ve benim ondalık ayırıcı olarak kullanmak olacaktır. Bununla bariz bir kusurdur vardır: 10.000 10 olarak yorumlanır.

Diğer bir yaklaşım: string 2 farklı sayısal olmayan karakterler içeriyorsa, ondalık ayırıcı olarak geçen birini kullanın ve diğerlerini atın. Sadece bir tane var, o bir kereden fazla devam edip etmediğini kontrol ve uyduğu takdirde atın. yalnızca bir kez görünüyorsa kendinden sonra 3 basamak olmadığını kontrol edin. evet, bunu atmak, aksi takdirde ondalık ayırıcı olarak kullanın.

bariz en iyi çözüm Kullanıcı kültür veya Tarayıcı algılamak olacaktır, ancak en-ABD Windows / Browser kullanarak bir Fransız varsa o işe yaramaz.

Net Framework daha iyidir bazı efsanevi kara büyü kayan nokta ayrıştırıcı içeriyor mu Double.(Try)Parse()otomatik algılama sayı biçiminde çalışırken?

Oluştur 01/08/2008 saat 20:23
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
26

Ben Bu durumda yapabileceğiniz en iyi onların giriş almak ve sonra onlar demek ne düşündüğünü göstermek olduğunu düşünüyorum. Onlar kabul etmiyorsanız, onlara sen bekliyorsanız biçimi göstermek ve onları tekrar girmek için olsun.

Cevap 02/08/2008 saat 00:17
kaynak kullanıcı

oy
26

Sorunun ASP.NET tarafını bilemem ama .NET oldukça güçlü bir sınıfa sahip: System.Globalization.cultureınfo . Bir çift değeri içeren bir dize ayrıştırmak için aşağıdaki kodu kullanabilirsiniz:

double d = double.Parse("100.20", CultureInfo.CurrentCulture);
//  -- OR --
double d = double.Parse("100.20", CultureInfo.CurrentUICulture);

Bir şekilde ASP.NET (yani kullanarak HTTP istek başlıklarında) CultureInfo.CurrentCulture veya CultureInfo.CurrentUICulture birine Geçerli kullanıcının CultureInfo geçerse, bu iyi çalışır.

Cevap 01/08/2008 saat 21:02
kaynak kullanıcı

oy
11

Herkesi memnun edemezsiniz. Ben 10.000 olarak ona girmek ve birisi 10.000 olarak on bin girerse, giriş kültürün bazı bilgisi olmadan bu işleyemez. (??? Tarayıcı, sistem ayarı - kullanma durumu ne ASP İç uygulaması veya dünyaya açık) bir şekilde kültür Algılama veya beklenen biçimlendirme bir örnek oluşturmaktadır, ve mümkün en hoşgörülü ayrıştırıcı kullanın. Muhtemelen gibi bir şey:

double d = Double.Parse("5,000.00", NumberStyles.Any, CultureInfo.InvariantCulture);
Cevap 01/08/2008 saat 21:05
kaynak kullanıcı

oy
9

Eğer maksimum <1000 * dak, kolayca tahmin edebilirsiniz beklenen dizi sağlarsanız Fransızca ve İngilizce 12.345 arasındaki fark 1000 bir faktördür.

örneğin mm (bebekler ve çocuklar dahil) bir kişinin yüksekliğini atın.

912.300 veya 912,300 olan bir giriş açık bir şekilde 91 cm ve 2.3 milimetre olarak yorumlanabilir ise 200-3000 aralığı kullanılarak, 1.800 ya da 1.800 olan bir giriş açıkça, 1 metre ve 80 santimetre olarak yorumlanabilir.

Cevap 02/08/2008 saat 13:28
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more