javascript - Hvordan kan jeg finne lengden på et tall?
Jeg ser etter å få lengden på et tall i JavaScript eller jQuery?
Jeg har prøvd value.length uten noen suksess, må jeg først konvertere dette til en streng?
Svar #1
var x = 1234567;
x.toString().length;
Denne prosessen vil også fungere for Float Number og for Exponential number også.
Svar #2
Ok, så mange svar, men dette er en ren matematikkoppgave, bare for moro skyld eller for å huske at matematikk er viktig:
var len = Math.ceil(Math.log(num + 1) / Math.LN10);
Dette gir faktisk "lengden" på tallet selv om det er i eksponensiell form. num skal være et ikke-negativt heltall her: hvis det er negativt, ta absoluttverdien og juster tegnet etterpå.
Oppdatering for ES2015
Nå som Math.log10 er en ting, kan du enkelt skrive
const len = Math.ceil(Math.log10(num + 1));
Svar #3
Kan også bruke en malstreng:
const num = 123456
`${num}`.length // 6
Svar #4
Du må gjøre tallet om til en streng for å kunne ta lengden
var num = 123;
alert((num + "").length);
eller
alert(num.toString().length);
Svar #5
Jeg har brukt denne funksjonaliteten i node.js, dette er min raskeste implementering så langt:
var nLength = function(n) {
return (Math.log(Math.abs(n)+1) * 0.43429448190325176 | 0) + 1;
}
Den bør håndtere positive og negative heltall (også i eksponentiell form) og bør returnere lengden på heltallsdelen i desimaltall.
Følgende referanse bør gi noen innsikt i metoden: Weisstein, Eric W. "Number Length." Fra MathWorld--A Wolfram Web Resource.
Jeg tror at noen bitvise operasjoner kan erstatte Math.abs, men jsperf viser at Math.abs fungerer helt fint i de fleste js-motorer.
Oppdatering: Som nevnt i kommentarene, har denne løsningen noen problemer :(
Oppdatering2 (omgåelse) : Jeg tror at på et tidspunkt oppstår presisjonsproblemer, og Math.log(...)*0.434... oppfører seg rett og slett uventet. Men hvis Internet Explorer eller mobile enheter ikke er din greie, kan du erstatte denne operasjonen med Math.log10-funksjonen. I Node.js skrev jeg en rask grunnleggende test med funksjonen nLength=(n) => 1 + Math.log10(Math.abs(n) + 1) | 0;, og med Math.log10 fungerte det som forventet. Vennligst merk at Math.log10 ikke er universelt støttet.
