Czy istnieje program formatujący ekran, który wyprowadza liczby dziesiętne jako te reprezentacje ciągów w języku C # bez wykonywania żadnego zaokrąglania?
// decimal -> string
20 -> 20
20.00 -> 20
20.5 -> 20.5
20.5000 -> 20.5
20.125 -> 20.125
20.12500 -> 20.125
0.000 -> 0
{0. #} zaokrągli, a użycie niektórych funkcji przycinania nie będzie działać z powiązaną kolumną numeryczną w siatce.
c#
formatting
decimal
JC.
źródło
źródło
"0.0#"
.Właśnie nauczyłem się, jak prawidłowo używać specyfikatora
G
formatu. Zobacz dokumentację MSDN . Trochę dalej znajduje się uwaga, która stwierdza, że końcowe zera zostaną zachowane dla typów dziesiętnych, gdy nie określono dokładności. Dlaczego mieliby to zrobić, nie wiem, ale określenie maksymalnej liczby cyfr dla naszej dokładności powinno rozwiązać ten problem. WięcG29
najlepiej jest formatować ułamki dziesiętne .źródło
Ten format ciągu powinien stanowić Twój dzień: „0. ############################”. Pamiętaj jednak, że cyfry dziesiętne mogą mieć maksymalnie 29 cyfr znaczących.
Przykłady:
źródło
To kolejna odmiana tego, co widziałem powyżej. W moim przypadku muszę zachować wszystkie znaczące cyfry po prawej stronie przecinka, co oznacza usunięcie wszystkich zer po najbardziej znaczącej cyfrze. Pomyślałem, że fajnie byłoby się nimi podzielić. Nie mogę jednak ręczyć za skuteczność tego, ale próbując osiągnąć estetykę, już jesteś skazany na nieefektywność.
To wszystko, chciałem tylko dorzucić swoje dwa centy.
źródło
strValue.TrimEnd('0').TrimEnd('.')
zamiastEndsWith
czeku?Inne rozwiązanie, oparte na odpowiedzi dysleksikanaboko , ale niezależne od aktualnej kultury:
źródło
Metoda przedłużenia:
Przykładowy kod:
Wynik:
źródło
IndexOf
jak znajdować znaki w ciągu. Bardzo łatwo jest dostosować przykład, aby rozwiązać problem bez miejsc po przecinku.Nie sądzę, że jest to możliwe po wyjęciu z pudełka, ale prosta metoda, taka jak ta, powinna to zrobić
źródło
Jest to dość łatwe do zrobienia po wyjęciu z pudełka:
to usunie wszystkie końcowe zera z twojego Decimal.
Jedyne, co musisz zrobić, to dodać
.ToString().TrimEnd('0','.');
do zmiennej dziesiętnej, aby przekonwertować aDecimal
naString
bez końcowych zer, jak w powyższym przykładzie.W niektórych regionach powinien to być plik
.ToString().TrimEnd('0',',');
(gdzie zamiast kropki używają przecinka, ale dla pewności można też dodać kropkę i przecinek jako parametry).(możesz również dodać oba jako parametry)
źródło
params
masz do czynienia z argumentem, nie musisz jawnie konstruować tablicy. Więc zamiast rozwlekłychTrimEnd("0".ToCharArray())
możesz po prostu napisaćTrimEnd('0')
(uwaga: przekazano pojedynczochar
zamiast achar[]
).char
, a nie astring
(więc: pojedyncze cudzysłowy, a nie podwójne cudzysłowy). Naprawiłem to dla ciebie - mam nadzieję, że nie masz nic przeciwko.źródło
Skończyło się na następującym kodzie:
źródło
Skończyło się na tym wariancie:
Zalety:
możesz określić maksymalną liczbę cyfr znaczących po punkcie do wyświetlenia w czasie wykonywania;
możesz jawnie określić metodę rundy;
możesz jawnie kontrolować kulturę.
źródło
Możesz utworzyć metodę rozszerzenia
źródło
Poniższe metody rozszerzeń wykonałem dla siebie, aby pasowały do jednego z moich projektów, ale może przyniosą korzyści komuś innemu.
Chociaż będzie to wymagało odniesienia do
System.Numerics
.źródło