Answers:
length
是属性,而不是方法。您不能调用它,因此不需要括号()
:
function getlength(number) {
return number.toString().length;
}
更新:如注释中所述,上面的示例不适用于浮点数。要使其正常工作,我们可以使用来消除句点String(number).replace('.', '').length
,或者使用正则表达式来计数数字:String(number).match(/\d/g).length
。
就速度而言,最快地获得给定数字位数的方法可能是数学上。对于正整数,有一个很棒的算法log10
:
var length = Math.log(number) * Math.LOG10E + 1 | 0; // for positive integers
对于所有类型的整数(包括负数),@ Mwr247提供了一个出色的优化解决方案,但是请谨慎使用Math.log10
,因为许多旧版浏览器均不支持。因此,更换Math.log10(x)
与Math.log(x) * Math.LOG10E
将解决兼容性问题。
由于浮点数学的众所周知的行为,创建用于十进制数的快速数学解决方案并不容易,因此强制转换为字符串的方法将更加简单和可靠。正如@streetlogics所提到的,可以使用简单的数字到字符串串联来完成快速转换,从而将替换解决方案转换为:
var length = (number + '').replace('.', '').length; // for floats
number.toString().match(/\d/g).length
。
x | 0
只是的又一个又简短又快速的版本Math.floor(x)
,它会将数字四舍五入。您可以使用实现相同的目的~~x
。以下问题对此提供了更多解释:stackoverflow.com/q/9049677/1249581。
这是一个数学答案(也适用于负数):
function numDigits(x) {
return Math.max(Math.floor(Math.log10(Math.abs(x))), 0) + 1;
}
以及以上的优化版本(更有效的按位操作):
function numDigits(x) {
return (Math.log10((x ^ (x >> 31)) - (x >> 31)) | 0) + 1;
}
本质上,我们从获取输入的绝对值开始,以允许负值正确工作。然后,我们执行log10操作以提供输入的10的幂(如果您使用的是其他底数,则应使用该底数的对数),即位数。然后,我们将输出取整以仅获取其中的整数部分。最后,我们使用max函数来固定十进制值(0到1之间的任何小数值只会返回1,而不是负数),然后在最终输出中加1以获得计数。
以上假设(基于您的示例输入)您希望以整数形式计算位数(因此12345 = 5,因此12345.678 = 5)。如果您想计算该值中的总位数(因此12345.678 = 8),则可以在上述任一函数的“ return”之前将其添加:
x = Number(String(x).replace(/[^0-9]/g, ''));
Math.LOG10E
自ES1开始就存在,这意味着Math.log(x) * Math.LOG10E
它将为兼容而工作。
由于这是在Google搜索“ javascript获取数字位数”时出现的,因此我想把它扔掉,因为有一个较短的替代方法依赖于内部转换来为您完成:
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);
产量
3 4
如果需要数字(在分隔符之后),则可以简单地将数字和计数长度的第二部分(在点之后)分开。
function countDigits(number) {
var sp = (number + '').split('.');
if (sp[1] !== undefined) {
return sp[1].length;
} else {
return 0;
}
}
我仍然在学习Javascript,但不久前我在C语言中想出了此函数,它使用数学和while循环而不是字符串,因此我将其重新编写为Javascript。也许可以通过某种方式递归完成,但是我仍然没有真正理解这个概念:(这是我能想到的最好的方法。我不确定它可以处理多少个数字,当我输入一百个数字时它是否可以工作数字。
function count_digits(n) {
numDigits = 0;
integers = Math.abs(n);
while (integers > 0) {
integers = (integers - integers % 10) / 10;
numDigits++;
}
return numDigits;
}
编辑:仅适用于整数值
注:此功能将忽略小数点后的平均数字点,如果你想用十进制计数然后取出Math.floor()
。直接指出这一点!
function digitCount ( num )
{
return Math.floor( num.toString()).length;
}
digitCount(2343) ;
// ES5 +
const digitCount2 = num => String( Math.floor( Math.abs(num) ) ).length;
console.log(digitCount2(3343))
基本上,这是怎么回事。toString()
以及String()
用于将数字转换为字符串的内置函数,一旦我们进行了转换,便可以通过内置函数找到字符串的长度length
。
警告:但是此功能不适用于负数,如果您尝试使用负数,请检查此答案或简单地Math.abs()
输入;
加油!
`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));
问题陈述:不使用string.length() jsfunction 计数数字/字符串。解决方案:我们可以通过Forloop做到这一点。例如
for (x=0; y>=1 ; y=y/=10){
x++;
}
if (x <= 10) {
this.y = this.number;
}
else{
this.number = this.y;
}
}
这是我的解决方案。它适用于正数和负数。希望这可以帮助
function findDigitAmount(num) {
var positiveNumber = Math.sign(num) * num;
var lengthNumber = positiveNumber.toString();
return lengthNumber.length;
}
(findDigitAmount(-96456431); // 8
(findDigitAmount(1524): // 4
请使用以下表达式获取数字的长度。
length = variableName.toString().length
length属性返回字符串的长度(字符数)。
空字符串的长度为0。
var str = "Hello World!";
var n = str.length;
n的结果将是:12
var str = "";
var n = str.length;
n的结果将是:0
数组长度属性:
length属性设置或返回数组中元素的数量。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.length;
其结果将是:4
句法:
返回数组的长度:
array.length
设置数组的长度:
array.length=number