Zoals de titel van mijn bericht suggereert, zou ik graag willen weten hoeveel cijfers var number
heeft. Bijvoorbeeld: Als number = 15;
moet mijn functie 2
teruggeven. Momenteel ziet het er zo uit:
function getlength(number) {
return number.toString().length();
}
Maar Safari zegt dat het niet werkt vanwege een TypeError
:
'2' is not a function (evaluating 'number.toString().length()')
Zoals je kunt zien, is '2'
eigenlijk de juiste oplossing. Maar waarom is het not a function
?
Antwoord 1, autoriteit 100%
length
is een eigenschap, geen methode. Je kunt het niet noemen, daarom heb je geen haakjes nodig ()
:
function getlength(number) {
return number.toString().length;
}
UPDATE:Zoals besproken in de opmerkingen, werkt het bovenstaande voorbeeld niet voor float-nummers. Om het te laten werken kunnen we ofwel een punt verwijderen met String(number).replace('.', '').length
, of de cijfers tellen met reguliere expressie: String(number).match(/\d/g).length
.
In termen van snelheid is de snelste manier om het aantal cijfers in het gegeven getal te krijgen, om het wiskundig te doen. Voor positieve gehele getallenis er een prachtig algoritme met log10
:
var length = Math.log(number) * Math.LOG10E + 1 | 0; // for positive integers
Voor alle typen gehele getallen (inclusief negatieven) is er een briljante geoptimaliseerde oplossing van @Mwr247, maar wees voorzichtig met met behulp van Math.log10
, omdat het niet door veel oudere browsers wordt ondersteund. Dus het vervangen van Math.log10(x)
door Math.log(x) * Math.LOG10E
lost het compatibiliteitsprobleem op.
Het maken van snelle wiskundige oplossingen voor decimale getallen zal niet eenvoudig zijn vanwege het bekende gedrag van drijvende-komma-wiskunde, dus cast-to-string benadering zal gemakkelijker en onfeilbaarder zijn. Zoals vermeld door @streetlogicskan snel casten worden gedaan met een eenvoudige aaneenschakeling van getallen naar string, waardoor de replaceoplossing om te zetten in:
var length = (number + '').replace('.', '').length; // for floats
Antwoord 2, autoriteit 28%
Hier is een wiskundig antwoord (werkt ook voor negatieve getallen):
function numDigits(x) {
return Math.max(Math.floor(Math.log10(Math.abs(x))), 0) + 1;
}
En een geoptimaliseerde versie van het bovenstaande (efficiëntere bitsgewijze bewerkingen): *
function numDigits(x) {
return (Math.log10((x ^ (x >> 31)) - (x >> 31)) | 0) + 1;
}
In wezen beginnen we met het verkrijgen van de absolute waarde van de invoer om negatieve waarden correct te laten werken. Vervolgens doorlopen we de log10-bewerking om ons te geven welke macht van 10 de invoer is (als u in een andere basis zou werken, zou u de logaritme voor die basis gebruiken), wat het aantal cijfers is. Vervolgens verlagen we de uitvoer om alleen het gehele deel daarvan te pakken. Ten slotte gebruiken we de max-functie om decimale waarden vast te stellen (elke fractionele waarde tussen 0 en 1 geeft gewoon 1, in plaats van een negatief getal) en voegt 1 toe aan de uiteindelijke uitvoer om de telling te krijgen.
Bij het bovenstaande wordt ervan uitgegaan (op basis van uw voorbeeldinvoer) dat u het aantal cijfers in gehele getallen wilt tellen (dus 12345 = 5, en dus ook 12345.678 = 5). Als je het totale aantal cijfers in de waarde wilt tellen (dus 12345.678 = 8), voeg dit dan toe voor de ‘return’ in een van de bovenstaande functies:
x = Number(String(x).replace(/[^0-9]/g, ''));
* Houd er rekening mee dat bitwise-operaties in Javascript alleen werken met 32-bits waarden (dus een max van 2.147.483.647). Ga dus niet met de bitwise-versie als u verwacht dat nummers groter dan dat, of het zal gewoon niet werken.
3, Autoriteit 8%
Aangezien dit op een Google-zoektocht naar “JavaScript-nummer van cijfers” kwam, wilde ik het daar weggooien dat er een korter alternatief is voor dit die afhankelijk is van interne gieten die voor u moeten worden gedaan:
var int_number = 254;
var int_length = (''+int_number).length;
var dec_number = 2.12;
var dec_length = (''+dec_number).length;
console.log(int_length, dec_length);
rendementen
3 4
4, Autoriteit 3%
Het zou eenvoudig zijn om de lengte te krijgen als
`${NUM}`.length
waar num het nummer is om de lengte te krijgen voor
5
Als u cijfers nodig hebt (na separator), kunt u eenvoudig het nummer van het tweede deel van het aantal (na punt) gesplitst.
function countDigits(number) {
var sp = (number + '').split('.');
if (sp[1] !== undefined) {
return sp[1].length;
} else {
return 0;
}
}
6
Ik ben nog steeds een beetje van het leren JavaScript, maar ik kwam met deze functie in C Awhile geleden, dat wiskunde en een tijdje gebruikt in plaats van een string, dus ik heb het opnieuw geschreven voor JavaScript. Misschien kan dit op de een of andere manier recursief worden gedaan, maar ik heb het concept nog steeds niet echt begrepen 🙁 Dit is het beste waar ik mee kan bedenken. Ik weet niet zeker hoe groot van cijfers het werkt, het werkte toen ik in honderd is gedaan cijfers.
function count_digits(n) {
numDigits = 0;
integers = Math.abs(n);
while (integers > 0) {
integers = (integers - integers % 10) / 10;
numDigits++;
}
return numDigits;
}
EDIT: werkt alleen met gehele waarden
7
var i = 1;
while( ( n /= 10 ) >= 1 ){ i++ }
23432 i = 1
2343.2 i = 2
234.32 i = 3
23.432 i = 4
2.3432 i = 5
0.23432
8
`You can do it by simple loop using Math.trunc() function. if in interview interviewer ask to do it without converting it into string`
let num = 555194154234 ;
let len = 0 ;
const numLen = (num) => {
for(let i = 0; i < num || num == 1 ; i++){
num = Math.trunc(num/10);
len++ ;
}
return len + 1 ;
}
console.log(numLen(num));
Antwoord 9
Gebruik de volgende uitdrukking om de lengte van het getal te krijgen.
length = variableName.toString().length
Antwoord 10
Je kunt in deze truc het volgende gebruiken:
(''+number).length
Antwoord 11
Twee cijfers: eenvoudige functie als u twee of meer cijfers van een nummer nodig heeft met ECMAScript 6 (ES6):
const zeroDigit = num => num.toString().length === 1 ? `0${num}` : num;
Antwoord 12
Probleeminstructie: Tel nummer/tekenreeks zonder string.length()jsfunction.
Oplossing: we zouden dit kunnen doen via de Forloop. bijv.
for (x=0; y>=1 ; y=y/=10){
x++;
}
if (x <= 10) {
this.y = this.number;
}
else{
this.number = this.y;
}
}
Antwoord 13
Hier is mijn oplossing. Het werkt met positieve en negatieve getallen.
Ik hoop dat dit helpt
function findDigitAmount(num) {
var positiveNumber = Math.sign(num) * num;
var lengthNumber = positiveNumber.toString();
return lengthNumber.length;
}
(findDigitAmount(-96456431); // 8
(findDigitAmount(1524): // 4
Antwoord 14
Een oplossing die ook werkt met zowel negatieve getallen als floats, en die geen dure String-manipulatiefuncties aanroept:
function getDigits(n) {
var a = Math.abs(n); // take care of the sign
var b = a << 0; // truncate the number
if(b - a !== 0) { // if the number is a float
return ("" + a).length - 1; // return the amount of digits & account for the dot
} else {
return ("" + a).length; // return the amount of digits
}
}
Antwoord 15
voor gehele getallen kunnen we ook continu delen door 10 implementeren:
var getNumberOfDigits = function(num){
var count = 1;
while(Math.floor(num/10) >= 1){
num = Math.floor(num/10);
++count;
}
return count;
}
console.log(getNumberOfDigits(1))
console.log(getNumberOfDigits(12))
console.log(getNumberOfDigits(123))
Antwoord 16
Hoewel u deze vraag technisch niet beantwoordt, maar als u op zoek bent naar de lengte van het fractionele deel van een getal (bijv. 1.35 => 2
of 1 => 0
), kan dit u helpen:
function fractionalDigitLength(num) {
if (Number.isInteger(num)) return 0;
return String(num).split('.')[1].length;
}
Opmerking: reden waarom ik hier post, omdat ik denk dat mensen die dit antwoord googelen, misschien ook een oplossing willen om alleen de fractionele lengte van een getal te krijgen.
Antwoord 17
u kunt de functie Math.abs gebruiken om negatieve getallen om te zetten in positief en positieven te behouden zoals ze zijn. dan kun je het getal converteren naar string en lengte opgeven.
Math.abs(num).toString().length;
Ik vond deze methode het gemakkelijkst en het werkt best goed. maar als je zeker weet dat je een positief getal krijgt, kun je het gewoon veranderen in een string en dan lengte gebruiken.
num.toString().length
Antwoord 18
De eigenschap length retourneert de lengte van een tekenreeks (aantal tekens).
De lengte van een lege string is 0.
var str = "Hello World!";
var n = str.length;
Het resultaat van n is:
12
var str = "";
var n = str.length;
Het resultaat van n is:
0
Eigenschap voor arraylengte:
De eigenschap length bepaalt of retourneert het aantal elementen in een array.
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.length;
Het resultaat is: 4
Syntaxis:
Retourneer de lengte van een array:
array.length
Stel de lengte van een array in:
array.length=number