Chcę to zrobić za pomocą Math.Round
funkcji
c#
decimal
rounding
bankers-rounding
Rex M.
źródło
źródło
0.005
liczbę przed zaokrągleniem. Podobnie zaokrąglić w dół , odejmij0.005
przed przejściem doMath.Round
funkcji.MidPointRounding.ToEven
(inaczej „Zaokrąglanie banków”), jest to, że wszyscy nauczyliśmy się zaokrąglać w szkole, w której .5 zaokrągleń w górę powoduje zbyt duże zaokrąglanie w górę. Jest to problem w przypadku pieniędzy, obliczeń podatkowych itp.Spróbuj tego:
źródło
Osobiście nigdy niczego nie obchodzę. Staraj się, aby była jak najbardziej zdecydowana, ponieważ i tak zaokrąglanie jest trochę czerwonym śledziem w CS. Ale chcesz sformatować dane dla swoich użytkowników i w tym celu uważam, że
string.Format("{0:0.00}", number)
jest to dobre podejście.źródło
Jeśli chcesz ciąg
Lub dziesiętny
Ale pamiętaj! Zaokrąglanie nie ma charakteru dystrybucyjnego, tzn.
round(x*y) != round(x) * round(y)
. Nie rób więc zaokrąglania do samego końca obliczeń, w przeciwnym razie stracisz dokładność.źródło
Wikipedia ma ogólnie dobrą stronę na temat zaokrąglania.
Wszystkie języki (zarządzane) .NET mogą używać dowolnego z mechanizmów zaokrąglania w czasie wykonywania wspólnego języka (CLR). Na przykład metoda Math.Round () (jak wspomniano powyżej) umożliwia deweloperowi określenie rodzaju zaokrąglania (zaokrąglenie do parzystej lub zera od zera). Metoda Convert.ToInt32 () i jej odmiany wykorzystują zaokrąglanie do parzystości . Metody Ceiling () i Floor () są powiązane.
Możesz zaokrąglać również niestandardowe formatowanie numeryczne .
Zauważ, że Decimal.Round () używa innej metody niż Math.Round ();
Oto przydatna pozycja algorytmu zaokrąglania bankiera. Zobacz jeden z humorystycznych postów Raymonda tutaj o zaokrąglaniu ...
źródło
// zamień do dwóch miejsc po przecinku
=========
można także łączyć „0” z „#”.
źródło
Wiem, że to stare pytanie, ale zwróć uwagę na następujące różnice między rundą matematyczną i rundą ciągów znaków :
źródło
Jest to zaokrąglenie do 2 miejsc po przecinku w C #:
W VB.NET:
źródło
Jeśli chcesz zaokrąglić liczbę, możesz uzyskać różne wyniki w zależności od: w jaki sposób korzystasz z funkcji Math.Round () (w przypadku zaokrąglania w górę lub w dół), pracujesz z liczbami podwójnymi i / lub liczbami zmiennoprzecinkowymi i zastosujesz zaokrąglenie punktu środkowego. Zwłaszcza, gdy używa się z operacjami wewnątrz niego lub zmienną do zaokrąglenia pochodzi z operacji. Powiedzmy, że chcesz pomnożyć te dwie liczby: 0,75 * 0,95 = 0,7125 . Dobrze? Nie w C #
Zobaczmy, co się stanie, jeśli chcesz zaokrąglić do trzeciego miejsca po przecinku:
Jak widać, pierwsza runda () jest poprawna, jeśli chcesz zaokrąglić w dół punkt środkowy. Ale druga runda () jest błędna, jeśli chcesz zaokrąglić w górę.
Dotyczy to liczb ujemnych:
Tak więc, IMHO, powinieneś stworzyć własną funkcję zawijania dla Math.Round (), która spełni twoje wymagania. Stworzyłem funkcję, w której parametr „roundUp = true” oznacza zaokrąglanie do następnej większej liczby. To znaczy: 0,7125 zaokrągla do 0,713 i -0,7125 zaokrągla do -0,712 (ponieważ -0,712> -0,713). Jest to funkcja, którą utworzyłem i działa dla dowolnej liczby miejsc po przecinku:
Zmienna „korektor” służy do ustalania niedokładności działania liczb zmiennoprzecinkowych lub podwójnych.
źródło
Jedną z rzeczy, które możesz chcieć sprawdzić, jest mechanizm zaokrąglania matematyki.
http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx
Poza tym polecam podejście Math.Round (inputNumer, numberOfPlaces) nad * 100/100, ponieważ jest czystsze.
źródło
Powinieneś być w stanie określić liczbę cyfr, którą chcesz zaokrąglić za pomocą Math.Round (YourNumber, 2)
Możesz przeczytać więcej tutaj .
źródło
Math.Floor (123456.646 * 100) / 100 Zwróci 123456.64
źródło
ciąg a = „10.65678”;
dziesiętny d = Math.Round (Convert.ToDouble (a.ToString ()), 2)
źródło
Miałem dziwną sytuację, w której miałem zmienną dziesiętną, kiedy serializując 55,50, zawsze ustawia ona wartość domyślną matematycznie na 55,5. Ale podczas gdy nasz system kliencki z jakiegoś powodu poważnie oczekuje 55,50 i na pewno spodziewali się po przecinku. Tak było, gdy miałem napisać pomocnika, który zawsze konwertuje każdą wartość dziesiętną dopełnioną do 2 cyfr zerami zamiast wysyłać ciąg znaków.
Zastosowanie powinno być
Wynik:
źródło
źródło