Chcę uzyskać długość liczby w JavaScript lub jQuery?
Próbowałem value.length
bez powodzenia, czy muszę najpierw przekonwertować to na ciąg?
javascript
jquery
Code Junkie
źródło
źródło
Odpowiedzi:
Ten proces będzie również działał dla
Float Number
i dlaExponential number
również.źródło
Ok, tak wiele odpowiedzi, ale to jest czysta matematyka, tylko dla zabawy lub dla przypomnienia sobie, że matematyka jest ważna:
To faktycznie daje „długość” liczby, nawet jeśli ma ona postać wykładniczą.
num
ma być tutaj nieujemną liczbą całkowitą: jeśli jest ujemna, weź jego wartość bezwzględną, a następnie dostosuj znak.Aktualizacja dla ES2015
Teraz
Math.log10
to rzecz , możesz po prostu napisaćźródło
Math.ceil
iMath.abs
zamiast tego używa szybszego . Ale szczerze mówiąc, nie spodziewałem się takiego wzrostu wydajności w Chrome ... Dobrze wiedzieć!Korzystałem z tej funkcjonalności w node.js, to jest moja najszybsza jak dotąd implementacja:
Powinien obsługiwać dodatnie i ujemne liczby całkowite (również w postaci wykładniczej) i powinien zwracać długość części całkowitej w liczbach zmiennoprzecinkowych.
Poniższe odniesienie powinno dostarczyć pewnego wglądu w metodę: Weisstein, Eric W. „Długość liczby”. Z MathWorld - Zasób sieciowy Wolfram.
Uważam, że jakaś operacja bitowa może zastąpić Math.abs, ale jsperf pokazuje, że Math.abs działa dobrze w większości silników js.
Aktualizacja : jak zauważono w komentarzach, to rozwiązanie ma pewne problemy :(
Aktualizacja2 (obejście) : Uważam, że w pewnym momencie pojawiają się problemy z precyzją i po
Math.log(...)*0.434...
prostu zachowuje się nieoczekiwanie. Jeśli jednak Internet Explorer lub urządzenia mobilne nie są twoją filiżanką herbaty, możesz zastąpić tę operacjęMath.log10
funkcją. W Node.js napisałem szybki podstawowy test z funkcjąnLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0;
iMath.log10
działał zgodnie z oczekiwaniami. Należy pamiętać, żeMath.log10
nie jest to powszechnie obsługiwane.źródło
Aby uzyskać długość, musisz przekształcić liczbę w ciąg
lub
źródło
Można również użyć ciągu szablonu:
źródło
Cóż, bez zamiany liczby całkowitej na łańcuch, możesz stworzyć funkową pętlę:
Demo: http://jsfiddle.net/maniator/G8tQE/
źródło
.
jako część obliczeń.Najpierw przekonwertuj go na ciąg:
Dodanie do niego pustego ciągu niejawnie spowoduje
mynumber
przekształcenie się w łańcuch.źródło
Można to zrobić na trzy sposoby.
lepsza wydajność (najlepsza wydajność w ie11)
Matematyka (najlepsza wydajność w Chrome, Firefox, ale najwolniejsza w IE11)
jest tutaj jspref http://jsperf.com/fastest-way-to-get-the-first-in-a-number/2
źródło
Powinieneś wybrać najprostszy (stringLength), czytelność zawsze przewyższa szybkość. Ale jeśli zależy Ci na szybkości, poniżej znajdziesz kilka.
Trzy różne metody z różną szybkością.
źródło
W teście zadano mi podobne pytanie.
Liczby ujemne zostały dodane, aby trochę bardziej to skomplikować, stąd Math.abs ().
źródło
Chciałbym poprawić odpowiedź @Neal, która była całkiem dobra dla liczb całkowitych, ale liczba 1 zwróciłaby długość 0 w poprzednim przypadku.
źródło
Spróbuj tego:
Przykład użycia
źródło
Tak, aby znaleźć długość, musisz przekonwertować na ciąg znaków, na przykład
źródło