Mam pole ceny do wyświetlenia, które czasami może wynosić 100, 100,99 lub 100,9. Chcę wyświetlać cenę z dokładnością do 2 miejsc po przecinku tylko wtedy, gdy liczby dziesiętne są wprowadzane dla tej ceny, na przykład jeśli jest to 100, więc powinna tylko pokaż 100, a nie 100,00, a jeśli cena wynosi 100,2, powinna wyświetlić 100,20 podobnie dla 100,22 powinna być taka sama. Przeszukałem Google i natknąłem się na kilka przykładów, ale nie pasowały one dokładnie do tego, czego chciałem:
// just two decimal places
String.Format("{0:0.00}", 123.4567); // "123.46"
String.Format("{0:0.00}", 123.4); // "123.40"
String.Format("{0:0.00}", 123.0); // "123.00"
Odpowiedzi:
Nieelegancki sposób to:
Z
DoFormat
bycia coś takiego:Nie elegancki, ale działa w podobnych sytuacjach w niektórych projektach.
źródło
CurrentCulture
separatorem dziesiętnym może nie być.
. Jeśli nieCultureInfo.InvariantCulture
jest używanystring.Format
, musisz sprawdzić wartośćCultureInfo.NumberFormat.NumberDecimalSeparator
, a to byłaby prawdziwa PITA. :)60000
int i chcę, żeby tak było60.000
?Przepraszamy za reaktywację tego pytania, ale nie znalazłem tutaj właściwej odpowiedzi.
Przy formatowaniu liczb możesz użyć
0
jako miejsca obowiązkowego i#
opcjonalnego.Więc:
Możesz także łączyć
0
z#
.W tym przypadku zawsze używana jest metoda formatowania
CurrentCulture
. Niektóre kultury.
zostaną zmienione na,
.Odpowiedź na oryginalne pytanie:
Najprostsze rozwiązanie pochodzi z @Andrew ( tutaj ). Więc osobiście użyłbym czegoś takiego:
źródło
Jest to częsty przypadek użycia liczb zmiennoprzecinkowych.
Niestety, wszystkie wbudowane łańcuchy formatu liter (np. F, G, N) nie osiągną tego bezpośrednio.
Na przykład
num.ToString("F2")
zawsze pokaże 2 miejsca po przecinku, takie jak123.40
.Będziesz musiał użyć
0.##
wzoru, nawet jeśli wygląda na trochę gadatliwego.Kompletny przykład kodu:
źródło
Stare pytanie, ale moim zdaniem chciałem dodać najprostszą opcję.
Bez tysięcy separatorów:
Z tysiącami separatorów:
To samo, ale z String.Format :
Jeśli potrzebujesz go w wielu miejscach , użyłbym tej logiki w metodzie rozszerzenia :
źródło
próbować
źródło
Zresztą nie wiem, jak ustawić warunek w specyfikatorze formatu, ale możesz napisać własny formatyzator:
źródło
Oto alternatywa dla metody Uwe Keima, która nadal utrzymywałaby to samo wywołanie metody:
Z
MyCustomFormat
bycia coś takiego:źródło
CurrentCulture
separatorem dziesiętnym może nie być.
. O ile nieCultureInfo.InvariantCulture
jest używane zstring.Format
, musisz sprawdzić wartośćCultureInfo.NumberFormat.NumberDecimalSeparator
, która jest raczej nieelegancka.Prosty kod jednoliniowy:
źródło
Jeśli twój program musi działać szybko, wywołaj value.ToString (formatString), aby uzyskać ~ 35% szybszą wydajność formatowania łańcucha w stosunku do $ „{wartość: formatString}” i string.Format (formatString, wartość).
Dane
Kod
Kod wyjściowy
Bibliografia
Niestandardowe ciągi formatu liczbowego [docs.microsoft.com]
Przykład wykresów Qt BarChart [doc.qt.io]
źródło
Obawiam się, że nie ma wbudowanego formatu, który to zrobiłby. Będziesz musiał użyć innego formatu w zależności od tego, czy wartość jest liczbą całkowitą, czy nie. Lub zawsze formatuj do 2 miejsc po przecinku, a następnie manipuluj ciągiem, aby usunąć końcowe „.00”.
źródło
Jeśli żadna z pozostałych odpowiedzi nie działa dla Ciebie, może to wynikać z tego, że wiążesz
ContentProperty
kontrolkę wOnLoad
funkcji, co oznacza, że to nie zadziała:Rozwiązanie jest proste:
ContentStringFormat
w xaml jest właściwość. Więc kiedy tworzysz etykietę, zrób to:Lub
źródło
coś takiego też będzie działać:
źródło
Próbować:
źródło
Aby kod był bardziej przejrzysty, który napisał Kahia (jest przejrzysty, ale staje się trudny, gdy chcesz dodać do niego więcej tekstu) ... wypróbuj to proste rozwiązanie.
Musiałem dodać dodatkowy rzut (dziesiętny), aby Math.Round porównał dwie zmienne dziesiętne.
źródło
To zadziałało dla mnie!
źródło
W przypadku liczb dziesiętnych pochodzących z bazy danych (T-) SQL chcesz mieć możliwość konwertowania dziesiętnych i zerowalnych miejsc dziesiętnych z x miejscami dziesiętnymi, a także mieć możliwość łatwego przeglądania kodu w porównaniu z definicjami tabel - i oczywiście wyświetlanie odpowiednia liczba miejsc po przecinku dla użytkownika.
Niestety, Entity Framework nie konwertuje automatycznie czegoś takiego jak SQL
decimal(18,2)
na ekwiwalent .NET z taką samą liczbą miejsc dziesiętnych (ponieważ dostępny jest tylko ułamek dziesiętny z pełną dokładnością). Musisz ręcznie obciąć miejsca dziesiętne.Zrobiłem to w ten sposób:
Przykładowe użycie:
źródło