length
è una proprietà, non un metodo. Non puoi chiamarlo, quindi non hai bisogno di parentesi ()
:
function getlength(number) {
return number.toString().length;
}
AGGIORNAMENTO: come discusso nei commenti, l'esempio sopra non funzionerà per i numeri in virgola mobile. Per farlo funzionare possiamo o sbarazzarsi di un periodo con String(number).replace('.', '').length
, o contare le cifre con espressione regolare: String(number).match(/\d/g).length
.
In termini di velocità, potenzialmente il modo più veloce per ottenere il numero di cifre nel numero dato è farlo matematicamente. Per i numeri interi positivi esiste un meraviglioso algoritmo con log10
:
var length = Math.log(number) * Math.LOG10E + 1 | 0; // for positive integers
Per tutti i tipi di numeri interi (compresi i negativi) esiste una brillante soluzione ottimizzata da @ Mwr247 , ma fai attenzione all'uso Math.log10
, poiché non è supportata da molti browser legacy. Quindi la sostituzione Math.log10(x)
con Math.log(x) * Math.LOG10E
risolverà il problema di compatibilità.
Creare soluzioni matematiche veloci per i numeri decimali non sarà facile a causa del ben noto comportamento della matematica in virgola mobile , quindi l'approccio cast-to-string sarà più facile e infallibile. Come menzionato da @streetlogics, il casting veloce può essere eseguito con una semplice concatenazione da numero a stringa, portando la soluzione di sostituzione a essere trasformata in:
var length = (number + '').replace('.', '').length; // for floats