Wyświetlając obecnie wartość dziesiętną .ToString()
, dokładność wynosi 15 miejsc po przecinku, a ponieważ używam jej do reprezentowania dolarów i centów, chcę, aby wynik był tylko 2 miejsca po przecinku.
Czy używam do tego odmiany .ToString()
?
decimalVar.ToString ("#.##"); // returns "" when decimalVar == 0
lub
decimalVar.ToString ("0.##"); // returns "0" when decimalVar == 0
Decimal
iDouble
typeToString
przyjmuje argument do formatowania. Najpierw spróbuj przekonwertować swoją wartość na dziesiętną / podwójną.Wiem, że to stare pytanie, ale zdziwiłem się, widząc, że nikt nie wydaje odpowiedzi na to pytanie;
Chciałbym użyć tego:
http://msdn.microsoft.com/en-us/library/9s0xa85y.aspx
źródło
Spowoduje to:
23.456
→23.46
23
→23.00
;12.5
→12.50
Idealny do wyświetlania waluty.
Sprawdź dokumentację ToString („F”) (podziękowania dla Jona Schneidera).
źródło
.
można je zastąpić,
na podstawie kultury. Powinieneś przekazaćCultureInfo.InvariantCulture
jako drugi argument, aby to wyłączyć.Jeśli potrzebujesz tego tylko do wyświetlania, użyj string.Format
http://www.csharp-examples.net/string-format-double/
„M” jest przyrostkiem dziesiętnym. Informacje o sufiksie dziesiętnym:
http://msdn.microsoft.com/en-us/library/364x0z75.aspx
źródło
Biorąc pod uwagę dziesiętne d = 12,345; wyrażenia d.ToString („C”) lub String.Format („{0: C}”, d) dają 12,35 USD - zwróć uwagę, że używane są ustawienia waluty bieżącej kultury, w tym symbol.
Zauważ, że „C” używa liczby cyfr z bieżącej kultury. Zawsze można przesłonić domyślne wymusić niezbędną precyzję z
C{Precision specifier}
niczymString.Format("{0:C2}", 5.123d)
.źródło
Jeśli chcesz go sformatować przecinkami, a także kropką dziesiętną (ale bez symbolu waluty), na przykład 3 456 789,12 ...
źródło
Istnieją już dwie wysoko punktowane odpowiedzi, które odnoszą się do Decimal.Round (...), ale myślę, że potrzebne jest trochę więcej wyjaśnień - ponieważ istnieje nieoczekiwana ważna właściwość Decimal, która nie jest oczywista.
Po przecinku „wie”, ile miejsc po przecinku ma na podstawie tego, skąd pochodzi.
Na przykład mogą być nieoczekiwane:
Wykonanie tych samych operacji z
Double
nie da miejsc dziesiętnych ("25"
) dla każdego z powyższych.Jeśli chcesz od miejsc po przecinku do 2 miejsc po przecinku, masz około 95% szansy, ponieważ jest to waluta, w którym to przypadku jest to prawdopodobnie w porządku przez 95% czasu:
Lub w XAML, którego właśnie używasz
{Binding Price, StringFormat=c}
Jeden przypadek, w którym natrafiłem na miejsce dziesiętne jako dziesiętne, dotyczył wysyłania XML do serwisu Amazon. Usługa narzekała, ponieważ wartość dziesiętna (pierwotnie z SQL Server) była wysyłana jako
25.1200
odrzucana (25.12
oczekiwany format).Wszystko, co musiałem zrobić, to
Decimal.Round(...)
2 miejsca po przecinku, aby rozwiązać problem.TypedValue
jest typu,Decimal
więc nie mogłem tego zrobićToString("N2")
i musiałem go zaokrąglić i zachować jakodecimal
.źródło
Oto mały program Linqpad do wyświetlania różnych formatów:
Oto wyniki:
źródło
Metoda Math.Round (dziesiętna, Int32)
źródło
Bardzo rzadko chciałbyś mieć pusty ciąg, jeśli wartość wynosi 0.
Najwyżej oceniana odpowiedź jest niepoprawna i zmarnowała 10 minut czasu (większości) ludzi.
źródło
"#"
oznacza cyfrę numeru (w razie potrzeby) (bez dopełnienia, jeśli nie jest potrzebna)"0"
oznacza cyfrę numeru (bez względu na to, co) (wypełnione zerami, jeśli nie są dostępne)Odpowiedź Mike M. była idealna dla mnie na .NET, ale .NET Core nie ma
decimal.Round
metody w chwili pisania.W .NET Core musiałem użyć:
Metoda hacky, w tym konwersja na ciąg znaków, to:
źródło
Żadne z nich nie zrobiło dokładnie tego, czego potrzebowałem, aby wymusić 2 dp i zaokrąglić w górę jako
0.005 -> 0.01
Wymuszenie 2 dp wymaga zwiększenia precyzji o 2 dp, aby upewnić się, że mamy co najmniej 2 dp
następnie zaokrąglanie, aby upewnić się, że nie mamy więcej niż 2 dp
źródło
Najwyżej oceniana odpowiedź opisuje metodę formatowania reprezentacji ciągu wartości dziesiętnej i działa.
Jeśli jednak chcesz zmienić zapisaną dokładność na rzeczywistą wartość, musisz napisać coś takiego:
Przykładowy test jednostkowy:
źródło
Możesz użyć system.globalization, aby sformatować liczbę w dowolnym wymaganym formacie.
Na przykład:
Jeśli masz a
decimal d = 1.2300000
i musisz przyciąć go do 2 miejsc po przecinku, możesz go wydrukować w ten sposób,d.Tostring("F2",ci);
gdzie F2 jest łańcuchem tworzącym do 2 miejsc po przecinku, a ci jest ustawieniem narodowym lub kulturą.Aby uzyskać więcej informacji, sprawdź ten link
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
źródło
https://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx
Ten link szczegółowo wyjaśnia, jak poradzić sobie z problemem i co możesz zrobić, jeśli chcesz dowiedzieć się więcej. Dla uproszczenia chcesz to zrobić
jeśli chcesz tego dla waluty, możesz to ułatwić, wpisując „C2” zamiast „F2”
źródło
źródło
Jeśli chcesz zachować tylko 2 miejsca po przecinku (tj. Odetnij wszystkie pozostałe cyfry po przecinku):
Jeśli chcesz zachować tylko 3 miejsca po przecinku:
źródło