Muszę pokazać wartość waluty w formacie 1K równym tysiącowi lub 1,1K, 1,2K, 1,9K itd., Jeśli nie są to nawet tysiące, w przeciwnym razie, jeśli poniżej tysiąca, wyświetl normalne 500, 100, 250 itd. , używając javascript do sformatowania numeru?
javascript
jquery
formatting
numbers
Carl Weis
źródło
źródło
M
iG
?Odpowiedzi:
Brzmi tak, że powinno działać dla Ciebie:
źródło
$mynumber_output
gdzie mam ją wstawić, aby jej użyć? Na przykład, powiedzmy$mynumber_output
= 12846, chciałbym przekonwertować12.8k
Bardziej uogólniona wersja:
źródło
if (num >= si[i].value)
zif (Math.abs(num) >= si[i].value)
.replace(rx, "$1")
zrobić?1.0
Staje się1
i1.10
staje się1.1
Oto proste rozwiązanie, które pozwala uniknąć wszystkich
if
instrukcji (z mocąMath
).Bonus Meme
Co to znaczy
SI
?źródło
Math.abs
, aby dodać wsparcie dla liczb ujemnych, tak:var tier = Math.log10(Math.abs(number)) / 3 | 0;
.Dalsze ulepszanie odpowiedzi Salmana, ponieważ zwraca nFormatter (33000) jako 33,0K
teraz nFormatter (33000) = 33K
źródło
Dzięki @Cos za komentarz, usunąłem zależność Math.round10.
źródło
Math.abs(num) >= decimal
.Wiele odpowiedzi w tym wątku staje się dość skomplikowanych, przy użyciu obiektów Math, obiektów map, pętli for, wyrażeń regularnych itp. Jednak te podejścia tak naprawdę nie poprawiają czytelności kodu ani wydajności. Wydaje się, że najlepszy projekt zapewnia proste podejście.
Formatowanie wartości Cash za pomocą K.
Formatowanie wartości gotówkowej za pomocą KMBT
Korzystanie z liczb ujemnych
źródło
'-' + formatCash(-1 * number)
Jeśli ci się spodoba, przekaż Waylon Flinn
Zostało to ulepszone w porównaniu z bardziej eleganckim podejściem do obsługi liczb ujemnych i przypadku „.0”.
Im mniej masz pętli i przypadków „jeśli”, tym lepsza IMO.
jsFiddle z przypadkami testowymi -> https://jsfiddle.net/xyug4nvz/7/
źródło
abbreviateNumber(999999) == '1000k'
zamiast'1M'
. Dzieje się tak, ponieważtoFixed()
również zaokrągla liczby. Nie wiem jednak, jak to naprawić: /toFixed()
mimo to zaokrągli liczbę, równie dobrze możesz zaokrąglić liczbę przed wysłaniemabbreviateNumber()
, aby1M
zamiast tego zwracała1000k
. Nie rozwiązanie, ale obejście.const floored = Math.floor(scaled * 10) / 10;
ES2020 dodaje obsługę tego przy
Intl.NumberFormat
użyciu notacji w następujący sposób:NumberFormat
okular:Zauważ, że w tej chwili nie wszystkie przeglądarki obsługują ES2020, więc możesz potrzebować tego Polyfill: https://formatjs.io/docs/polyfills/intl-numberformat
źródło
notation
i,compactDisplay
ale FireFox 77 i Safari 13.1 nadal go nie obsługują, więc prawdopodobnie będziesz potrzebować polyfill.to jest całkiem eleganckie.
źródło
Możesz użyć pakietu w formacie d3 wzorowanego na Python Advanced String Formatting PEP3101 :
źródło
Dalsza poprawa odpowiedzi @ Yash z obsługą liczb ujemnych:
źródło
Ten post jest dość stary, ale jakoś do niego dotarłem szukając czegoś. SO, aby dodać moje dane wejściowe Numeral js to rozwiązanie jednego przystanku teraz dni. Zawiera wiele metod ułatwiających formatowanie liczb
http://numeraljs.com/
źródło
Metoda krótka i ogólna
Możesz
COUNT_FORMATS
ustawić obiekt konfiguracyjny tak długi lub krótki, jak chcesz., W zależności od testowanego zakresu wartości.źródło
Dodając górną odpowiedź, da to 1k za 1000 zamiast 1,0k
źródło
Zmodyfikowana wersja odpowiedzi Waylona Flinna z obsługą ujemnych wykładników:
Oczekiwany wynik:
źródło
!Number.isFinite
' K M G T P E Z Y'
na,' K M'
jeśli chcesz, aby maksymalna jednostka toM
Poniższy kod to 1K = 1024, jeśli chcesz 1K = 1000, zmień wszystkie 1024 na 1000.
źródło
Dalsze ulepszanie odpowiedzi @ tfmontague w celu formatowania miejsc dziesiętnych. 33,0 tys. Do 33 tys
źródło
Nie spełnia żadnego z opublikowanych rozwiązań, więc oto moja wersja:
Obsługuje parametr precyzji
źródło
Wymyśliłem bardzo kodowaną grę w golfa i jest bardzo krótka!
źródło
Dalsze ulepszanie odpowiedzi Salmana z powodu przypadków takich jak nFormatter (999999,1), który zwraca 1000K.
źródło
Najprostszym i najłatwiejszym sposobem na to jest
Działa to dla dowolnej liczby. W tym
L
Cr
itp.źródło
Eliminując pętlę w rozwiązaniu @ martin-sznapka, zredukujesz czas wykonania o 40%.
Test szybkości (200000 losowych próbek) dla innego rozwiązania z tego wątku
źródło
źródło
Ta funkcja może przekształcić ogromne liczby (zarówno dodatnie, jak i ujemne) w format przyjazny dla czytelnika bez utraty precyzji:
źródło
Używam tej funkcji. Działa zarówno w przypadku, jak
php
ijavascript
.źródło
Postanowiłem znacznie rozszerzyć odpowiedź @ Novellizator tutaj, aby zaspokoić moje potrzeby. Chciałem elastycznej funkcji, która poradziłaby sobie z większością moich potrzeb związanych z formatowaniem bez zewnętrznych bibliotek.
cechy
Przykłady
Funkcjonować
źródło
Wow, jest tu tak wiele odpowiedzi. Pomyślałem, że podam ci, jak go rozwiązałem, ponieważ wydawało się, że jest najłatwiejszy do odczytania, obsługuje liczby ujemne i wykracza daleko w zakresie kilogramów dla JavaScript. Łatwo byłoby również zmienić to, co chcesz lub rozszerzyć jeszcze bardziej.
źródło
Krótsza alternatywa:
źródło