用JavaScript获取数字的数量

正如我的post标题所示,我想知道var number有多less个数字。 例如:如果number = 15; 我的function应该返回2 。 目前看起来像这样:

 function getlength(number) { return number.toString().length(); } 

但Safari说,由于TypeError它不工作:

 '2' is not a function (evaluating 'number.toString().length()') 

正如你所看到的, '2'实际上是正确的解决scheme。 但为什么它not a function

length是一个属性,而不是一个方法。 你不能调用它,因此你不需要括号()

 function getlength(number) { return number.toString().length; } 

更新:正如在评论中所讨论的,上面的例子不适用于浮点数。 为了使它工作,我们可以用String(number).replace('.', '').length或者用正则expression式来计算数字: String(number).match(/\d/g).length

就速度而言,获得给定数字的最快方法是以math方式进行。 对于正整数有一个奇妙的algorithmlog10

 var length = Math.log(number) * Math.LOG10E + 1 | 0; // for positive integers 

对于所有types的整数(包括底片),来自@ Mwr247的优化解决scheme都很精彩 ,但使用Math.log10要小心,因为许多传统浏览器都不支持。 所以用Math.log10(x)replaceMath.log(x) * Math.LOG10E将解决兼容性问题。

由于众所周知的浮点math行为,创build十进制数的快速math解决scheme将不是一件容易的事情,所以铸造到string的方法将变得更加简单和简单。 正如@streetlogics所提到的,快速转换可以用简单的数字来完成string连接,导致replace解决scheme被转换为:

 var length = (number + '').replace('.', '').length; // for floats 

这是一个math答案(也适用于负数):

 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; } 

本质上,我们首先获取input的绝对值,以使负值正确工作。 然后我们运行log10操作来给我们input10的权力(如果你在另一个基地工作,你将使用该基数的对数),这是位数。 然后我们将输出放到只抓取整数部分。 最后,我们使用最大值函数来确定十进制值(0到1之间的任何小数值只返回1,而不是负数),并将1加到最终输出以获得计数。

以上假设(根据您的示例input),您希望计算整数的位数(所以12345 = 5,因此也是12345.678 = 5)。 如果你想计算数值的总数(so 12345.678 = 8),那么在上面两个函数中的“return”之前加上:

 x = Number(String(x).replace(/[^0-9]/g, '')); 

由于这是在谷歌search“javascript获取数字位数”,所以我想把它扔在那里,有一个更短的替代scheme,这依赖于内部铸造完成你:

 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语言中使用了这个函数,它使用math和while循环而不是string,所以我重写了它的Javascript。 也许这可以以某种方式recursion地完成,但是我仍然没有真正理解这个概念:(这是我能想到的最好的结果,我不确定它有多大的数字,当我把百数字。

 function count_digits(n) { numDigits = 0; integers = Math.abs(n); while (integers > 0) { integers = (integers - integers % 10) / 10; numDigits++; } return numDigits; } 

编辑:只适用于整数值

 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 

length属性返回一个string的长度(字符数)。

空string的长度是0。

 var str = "Hello World!"; var n = str.length; 

n的结果是:12

  var str = ""; var n = str.length; 

n的结果是:0


数组长度属性:


长度属性设置或返回数组中元素的数量。

 var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.length; 

结果将是:4

句法:

返回数组的长度:

 array.length 

设置数组的长度:

 array.length=number