2013-04-16 14 views
16

Potrzebuję wyświetlić liczbę z przecinkami i kropką dziesiętną.sformatuj liczbę przecinkami i liczbami dziesiętnymi w języku C# (asp.net MVC3)

Np Przypadek 1: liczba dziesiętna jest 432.324 (nie posiada przecinków lub miejsc po przecinku) trzeba wyświetlić go jako 432,324.00
ale nie 432.324

Przypadek 2: Liczba dziesiętna wynosi 2.222.222,22 (to nie ma z przecinkami) trzeba wyświetlić go jako 2,222,222.22

próbowałem ToString("#,##0.##"). Ale to nie jest Formatowanie go

+3

Kiedy mówisz "nie działa", co jest string.Format rzeczywiście robi? – tomasmcguinness

+0

Nie wypróbowałem metody string.Format, a ja używałem formatowania tostringowego jest łatwe – Krishan

+2

Naprawdę nie rozumiem twoich przykładów, jaki to rodzaj formatowania? (Czy to tylko ja) – V4Vendetta

Odpowiedz

39
int number = 1234567890; 
Convert.ToDecimal(number).ToString("#,##0.00"); 

Dostaniesz wynik 1,234,567,890.00.

+0

w modelu, to jest jak publiczny dziesiętny Amount {get; set;}, kiedy używam, aby wprowadzić do wartości bazy danych 29.1234, otrzymuję wynik w widoku 29.12 nawet i zmienić bazę dziesiętną (18,4), która była (18 , 2) ale nadal mam wartość jak 29.1200, ale chcę dokładną wartość bez jakiejkolwiek zmiany jest to możliwe – SAR

+0

co do cholery, ta odpowiedź jest akceptowana? daje mi 1 234 567 890,00 – Toolkit

3

Twoje pytanie nie jest bardzo jasne, ale to powinno osiągnąć to, co staramy się robić:

decimal numericValue = 3494309432324.00m; 
string formatted = numericValue.ToString("#,##0.00"); 

Następnie formatted będzie zawierać: 3,494,309,432,324.00

6

Spróbuj z

ToString("#,##0.00") 

Z MSDN

* Specyfikator formatu niestandardowego "0" służy jako symbol zastępczy symbolu zerowego. Jeśli formatowana wartość ma cyfrę w pozycji, w której zero występuje w ciągu formatującym, ta cyfra jest kopiowana do ciągu wynikowego; w przeciwnym razie w ciągu wynikowym pojawi się zero. Pozycja skrajnego lewego zera przed punktem dziesiętnym i skrajne prawe zero po przecinku dziesiętnym określa zakres cyfr, które są zawsze obecne w ciągu wynikowym.

Specyfikacja "00" powoduje, że wartość jest zaokrąglana do najbliższej cyfry poprzedzającej kropkę dziesiętną, gdzie zawsze stosuje się zaokrąglanie od zera. Na przykład, formatowanie 34,5 z „00” spowoduje, że wartość 35. *

16

Może chcesz po prostu standardowym formacie ciąg "N", jak w

number.ToString("N") 

Wykorzysta tysiąc separatorów oraz stałe liczba ułamków dziesiętnych. Symbol separatorów tysięcy i symbol przecinka dziesiętnego zależą od dostawcy formatu (zazwyczaj CultureInfo), którego używasz, podobnie jak liczba cyfr po przecinku (która zwykle wynosi 2, zgodnie z wymaganiami).

Jeśli dostawca formatu określa inną liczbę miejsc po przecinku, a użytkownik nie chce zmieniać dostawcy formatu, można podać liczbę miejsc po przecinku po N, jak w przypadku .ToString("N2").

Edit: Rozmiary grup między przecinkami są regulowane przez układ

CultureInfo.CurrentCulture.NumberFormat.NumberGroupSizes 

, biorąc pod uwagę, że nie określono specjalną dostawcy formatu.

4
CultureInfo us = new CultureInfo("en-US"); 
TotalAmount.ToString("N", us) 
+0

CultureInfo nas = new CultureInfo ("en-US") zrobił to dla mnie – Toolkit

2

Wszystko, czego potrzeba, to "#, 0.00", C# robi resztę.

Num.ToString ("#," 0.00 ")

  • z "#, 0" formatuje tysiąc separatory
  • "0.00" zmusza dwóch miejsc po przecinku
4

miałem ten sam problem. Chciałem sformatować liczby, takie jak format "Ogólne" w arkuszach kalkulacyjnych, co oznacza, że ​​ułamki dziesiętne są znaczące, ale je odetnij, jeśli nie, Innymi słowy:

1234,56 => 1,234.56

1234 => 1.234

To musi obsługiwać maksymalną liczbę miejsc po przecinku, ale nie umieścić końcowe zera lub kropki, jeśli nie jest to wymagane, i oczywiście, musi być przyjazny dla kultury. Naprawdę nigdy nie udało mi się znaleźć sposobu, aby to zrobić samodzielnie, ale kombinacja String.Format i Regex.Replace z pewną pomocą kulturową z NumberFormatInfo.CurrentInfo wykonała zadanie (LinqPad C# Program).

string FormatNumber<T>(T number, int maxDecimals = 4) { 
    return Regex.Replace(String.Format("{0:n" + maxDecimals + "}", number), 
         @"[" + System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator + "]?0+$", ""); 
} 

void Main(){ 
    foreach (var test in new[] { 123, 1234, 1234.56, 123456.789, 1234.56789123 }) 
     Console.WriteLine(test + " = " + FormatNumber(test)); 
} 

Produkuje:

123 = 123 
1234 = 1,234 
1234.56 = 1,234.56 
123456.789 = 123,456.789 
1234.56789123 = 1,234.5679 
0
string Mynewcurrency = DisplayIndianCurrency("7743450.00"); 
     private string DisplayIndianCurrency(string EXruppesformate) 
     { 
     string fare = EXruppesformate; 
     decimal parsed = decimal.Parse(fare, CultureInfo.InvariantCulture); 
     CultureInfo hindi = new CultureInfo("en-IN"); 
    // string text = string.Format(hindi, "{0:c}", parsed);if you want <b>Rs 77,43,450.00</b> 
    string text = string.Format(hindi, "{0:N}", parsed); //if you want <b>77,43,450.00</b> 
     return ruppesformate = text; 
    } 
0

Spróbuj z

ToString("#,##0.###") 

Produkuje:

1234,55678 => 1,234.556

1234 => 1234

Powiązane problemy