none
String değeri biçimlendirmek RRS feed

  • Soru

  • Merhabalar,

    Üzerinde çalıştığım bir projede Web Service üzerinden bir XML gelmekte ve bu XML node'ları ayrıştırmaktayım. Fakat bir yerde takıldım. Gelen değeri InnerText ile almaktayım fakat bu değer string olduğu içim formatlayamıyorum. Mesela bu değerin 7 haneli bir string sayı olduğunu düşünürsek ben bunu nokta ve virgül ile ayıramıyorum.

    Örnek olarak;

    price.InnerHtml += nodeFareList.SelectSingleNode("GenQuoteDetails/TotAmt").InnerText;

    kodu ile almaktayım. Ve gelen sonuç örnek olarak 147852470.

    Ben bunu para birimi gibi formatlamak istiyorum. Yani 1.478,52470 gibi.

    Teşekkürler.

    21 Eylül 2012 Cuma 08:23

Yanıtlar

  • Selamlar, 

    bunun için yöntemini; "Önce decimal'e çevie, ardından biçimleyerek string'e çevir" şeklinde olmalı.

    price.InnerHtml += decimal.Parse(nodeFareList.SelectSingleNode("GenQuoteDetails/TotAmt").InnerText).ToString("N2");

    ben örnekte N2 yaptım; binler ayıracı kullan ve 2 basamak ondalık kullan demek
    145785240 olan sayıyı 145.785.240,00 olarak yazar
    14578,5240 olan sayıyı 14.578,52 olarak yazar


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    21 Eylül 2012 Cuma 09:12
    Moderatör
  • Verdiğiniz çözüm faydalı oldu. Ben kendimde biraz şans eseri bir çözüm buldum.

    İleride birileri bu sorunu yaşarda çözemezlerse alternatif olarak kullanabilirler.

    string priceString = nodeFareList.SelectSingleNode("GenQuoteDetails/TotAmt").InnerText;
                    double priceDouble = Convert.ToDouble(priceString) / 100.0;
    
                    price.InnerHtml += String.Format("{0:c}", priceDouble) + "<br/>";

    Burada sonuç, 1.181,76 çıkıyor.

    Web Servis gibi uygulamalar kullanan arkadaşlara büyük ihtimalle çok faydası dokunacaktır.

    Teşekkürler.

    21 Eylül 2012 Cuma 10:42

Tüm Yanıtlar

  • Selamlar, 

    bunun için yöntemini; "Önce decimal'e çevie, ardından biçimleyerek string'e çevir" şeklinde olmalı.

    price.InnerHtml += decimal.Parse(nodeFareList.SelectSingleNode("GenQuoteDetails/TotAmt").InnerText).ToString("N2");

    ben örnekte N2 yaptım; binler ayıracı kullan ve 2 basamak ondalık kullan demek
    145785240 olan sayıyı 145.785.240,00 olarak yazar
    14578,5240 olan sayıyı 14.578,52 olarak yazar


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    21 Eylül 2012 Cuma 09:12
    Moderatör
  • Yukarıdaki kullandığınız kodları daha önce hiç görmedim, denemedim ve bilmiyorum ama aklıma; string.format geliyor.

    Eğer geri dönen veriyi double bir şekilde göstermek istiyorsanız ilk önce virgülü ayırmak zorundasınız. Yada karar vereceksiniz standart olarak virgülden sonra maximum 3 basamaklı sayı olabilir gibi. Yani şöyle;

    19438575639 gibi bir sayı gelirse 19438575,639 şeklinde yapacak veya (substring kullanabilirsiniz) 123232 gibi bir sayı gelirse 123,232 şeklinde virgülü ayıracak. Yoksa double bir sayıyı otomatik olarak tahmin etmesi imkansız :) yada geri dönen değerde virgülü bir şekilde belirtmelisiniz. Bu nokta olur, harf olur yani bir şey olmak zorunda. (Replace komutunu kullanarak "," olarak düzenlemeniz gerekmektedir) Bu düzeltilen değeride convert metodunu kullanarak işleminizi gerçekleştirebilirsiniz. Örnek:

    string cData = nodeFareList.SelectSingleNode("Gen/QuoteDetails/TotAmt").InnerText;
    
    double sCurrency = Convert.ToDouble(cData, System.Globalization.CultureInfo.InvariantCulture);
    
    string convertCurrencySTR = sCurrency.ToString("0,0.000", System.Globalization.CultureInfo.InvariantCulture);
    
    price.InnerHtml += convertCurrencyStr;

    Yukarıdaki kod umarım işini görür. cData şu şekilde bir veri almalı : 123341233.2765;

    Eğer yukarıdaki şekilde bir değer alırsa kodlar şu şekilde çıktı üretir: 123341233.277;

    Sonunu yuvarlamasının nedeni: cData virgülden sonra 4 basamaklı sayı olması. Eğer üç basamaklı sayı olursa 276 olarak çıktı üretir. Virgülden sonra 2 basamak olursa 0 sayısını otomatik olarak sayıların sonuna kondurur :)


    Just a .net developer.


    21 Eylül 2012 Cuma 09:43
  • Verdiğiniz çözüm faydalı oldu. Ben kendimde biraz şans eseri bir çözüm buldum.

    İleride birileri bu sorunu yaşarda çözemezlerse alternatif olarak kullanabilirler.

    string priceString = nodeFareList.SelectSingleNode("GenQuoteDetails/TotAmt").InnerText;
                    double priceDouble = Convert.ToDouble(priceString) / 100.0;
    
                    price.InnerHtml += String.Format("{0:c}", priceDouble) + "<br/>";

    Burada sonuç, 1.181,76 çıkıyor.

    Web Servis gibi uygulamalar kullanan arkadaşlara büyük ihtimalle çok faydası dokunacaktır.

    Teşekkürler.

    21 Eylül 2012 Cuma 10:42