用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