Chciałbym sformatować moje liczby, aby zawsze wyświetlały 2 miejsca po przecinku, w stosownych przypadkach zaokrąglając.
Przykłady:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
Korzystałem z tego:
parseFloat(num).toFixed(2);
Ale wyświetla się raczej 1
jako .1
1.00
Odpowiedzi:
Demo na żywo
Pokaż fragment kodu
Zauważ, że zaokrągli to do 2 miejsc po przecinku, więc dane wejściowe
1.346
powrócą1.35
.źródło
1
wyświetlać jako1.00
i1.341
wyświetlać jako1.34
.(+num).toFixed(2)
. Zachowuje nawet błąd zaokrąglania w oryginale, patrz odpowiedź Nate'a .Pokaż fragment kodu
źródło
1.34
wyrazNumber(1.345).toFixed(2)
.1.345
jest przykładem liczby, której nie można zapisać dokładnie w liczbach zmiennoprzecinkowych, więc myślę, że powodem tego, że nie zaokrągla się tak, jak się spodziewasz, jest fakt, że jest ona lekko przechowywana jako liczba mniej niż 1.345 i zaokrągla w dół. Jeśli zamiast testować przy(1.34500001).toFixed(2)
czym widać, że poprawnie zaokrągla się do1.35
Ta odpowiedź nie powiedzie się, jeśli
value = 1.005
.Jako lepsze rozwiązanie problemu zaokrąglania można uniknąć, używając liczb reprezentowanych w notacji wykładniczej:
Kod czyszczący zgodnie z sugestią @Kon i oryginalnego autora:
Możesz dodać
toFixed()
na końcu, aby zachować kropkę dziesiętną np .:1.00
ale pamiętaj, że zwróci ona jako ciąg znaków.Źródło : Zaokrąglanie miejsc po przecinku w JavaScript
źródło
toFixed
ma ten problem z zaokrąglaniem. Twoja odpowiedź powinna być zaakceptowana.Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces)
źródło
toPrecision
formatuje liczbę tylko do określonej liczby miejsc po przecinku, po prostu pomijając zbędne miejsca, ale nie zaokrąglając ich . Oczywiście może to być bardzo przydatne, ale ważne jest, aby zrozumieć różnicę.(20.55).toPrecision(3) "20.6"
toFixed
:const formattedVal = Number(val.toFixed(2));
Nie używajtoPrecision
, ponieważ zlicza liczby nie dziesiętne przy użyciu parametru dokładności.Aby uzyskać najdokładniejsze zaokrąglenie, utwórz tę funkcję:
i użyj go, aby zaokrąglić do 2 miejsc po przecinku:
Dzięki Razu , ten artykuł i odniesienie Math.round MDN .
źródło
W przypadku nowoczesnych przeglądarek użyj
toLocaleString
:Jako pierwszy parametr określ znacznik lokalizacji, aby kontrolować separator dziesiętny . Dla kropki użyj na przykład ustawień regionalnych w języku angielskim w USA:
co daje:
Większość krajów w Europie używa przecinka jako separatora dziesiętnego, więc jeśli na przykład używasz ustawień narodowych w Szwecji / Szwecji:
da:
źródło
Najprostsza odpowiedź:
Przykład: http://jsfiddle.net/E2XU7/
źródło
toFixed
zostało już zasugerowane w stackoverflow.com/a/13292833/218196 . Jakie dodatkowe informacje zawiera twoje pytanie?toFixed
na numer.O wiele bardziej ogólne rozwiązanie zaokrąglania do N miejsc
źródło
roundN(-3.4028230607370965e+38,2)
zwraca"-3.4028230607370965e+38"
zamiast oczekiwanego 0,00https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat
źródło
Jeśli już używasz jQuery, możesz spojrzeć na użycie formatu liczb jQuery wtyczki .
Wtyczka może zwracać sformatowane liczby w postaci łańcucha, można ustawić separatory dziesiętne i tysiące, a także wybrać liczbę wyświetlanych miejsc po przecinku.
Możesz także uzyskać format liczb jQuery z GitHub .
źródło
Czy to masz na myśli?
źródło
Konwertuj liczbę na ciąg znaków, zachowując tylko dwa miejsca po przecinku:
Wynikiem n będzie:
źródło
Szukasz podłogi?
źródło
źródło
Oto także ogólna funkcja, która może formatować do dowolnej liczby miejsc po przecinku:
źródło
Tam, gdzie wymagane jest określone formatowanie, powinieneś napisać własną procedurę lub użyć funkcji biblioteki, która robi to, czego potrzebujesz. Podstawowa funkcjonalność ECMAScript jest zwykle niewystarczająca do wyświetlania sformatowanych liczb.
Dokładne wyjaśnienie zaokrąglania i formatowania znajduje się tutaj: http://www.merlyn.demon.co.uk/js-round.htm#RiJZasadniczo zaokrąglanie i formatowanie powinno być wykonywane jako ostatni krok przed wyjściem. Zrobienie tego wcześniej może spowodować nieoczekiwanie duże błędy i zniszczyć formatowanie.
źródło
źródło
Wystarczy natknąć się na ten jeden z najdłuższych wątków, poniżej znajduje się moje rozwiązanie:
Daj mi znać, jeśli ktoś może zrobić dziurę
źródło
Pokaż fragment kodu
źródło
parseFloat(num.toFixed(2))
Nie dajesz nam całego obrazu.
javascript:alert(parseFloat(1).toFixed(2))
pokazuje 1,00 w moich przeglądarkach po wklejeniu go do paska lokalizacji. Jeśli jednak później coś z tym zrobisz, nastąpi powrót.źródło
źródło
Musiałem zdecydować między konwersjami parseFloat () i Number (), zanim mogłem wykonać wywołanie toFixed (). Oto przykład formatowania liczb po wprowadzeniu danych przez użytkownika.
HTML:
Obsługa zdarzeń:
Powyższy kod spowoduje wyjątek TypeError. Zauważ, że chociaż typem wejściowym HTML jest „liczba”, to dane wejściowe użytkownika są w rzeczywistości typem danych „ciąg”. Jednak funkcję toFixed () można wywołać tylko dla obiektu, który jest liczbą.
Mój końcowy kod wyglądałby następująco:
Powodem, dla którego wolę rzutować za pomocą Number () vs. parseFloat (), jest to, że nie muszę wykonywać dodatkowej weryfikacji ani dla pustego ciągu wejściowego, ani dla wartości NaN. Funkcja Number () automatycznie obsłuży pusty ciąg i ukryje go do zera.
źródło
Lubię:
Zaokrąglij liczbę za pomocą 2 kropek dziesiętnych, a następnie parsuj ją,
parseFloat()
aby zwrócić Number, a nie String, chyba że nie przejmujesz się, czy jest to String czy Number.źródło
parseFloat("1.00") // 1
Rozszerz obiekt Math metodą precyzyjną
źródło
parseInt(number * 100) / 100;
pracował dla mnie.źródło
oto inne rozwiązanie, aby zaokrąglić tylko przy użyciu podłogi, co oznacza, że obliczona kwota nie będzie większa niż kwota pierwotna (czasami wymagana do transakcji):
źródło
Możesz wypróbować ten kod:
źródło
Wypróbuj poniższy kod:
źródło
źródło
Oto jak rozwiązuję mój problem:
źródło