使用JavaScript获取位数

问题描述 投票:97回答:11

正如我的帖子的标题所暗示的,我想知道var number有多少位数字。例如:如果number = 15;,我的函数应返回2。当前,它看起来像这样:

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

但是Safari表示由于TypeError而无法正常工作:

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

如您所见,'2'实际上是正确的解决方案。但是为什么它是not a function

javascript count digits
11个回答
193
投票

length是属性,而不是方法。您无法调用它,因此不需要括号()

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

UPDATE:如注释中所述,上面的示例不适用于浮点数。为了使它起作用,我们可以使用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将解决兼容性问题。

由于well known behaviour of floating point math,为十进制数字创建快速数学解决方案并不容易,因此,从字符串转换为字符串的方法将更加简单和可靠。如@streetlogics所述,可以使用简单的数字到字符串串联来完成快速转换,从而将replace解决方案转换为:]]

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

0
投票

这是我的解决方案。它适用于正数和负数。希望对您有所帮助


-5
投票

length属性返回字符串的长度(字符数)。


57
投票

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


19
投票

由于这是在Google搜索中找到的“ javascript获取数字位数”,我想把它扔掉,因为有一个较短的替代方法依赖于内部转换才能为您完成:


2
投票

如果需要数字(在分隔符之后),可以简单地分割数字并计算长度的第二部分(在点之后)。


1
投票

我仍然在学习Javascript,但是我不久前在C语言中想到了这个函数,它使用数学和while循环而不是字符串,因此我将其重写为Javascript。也许可以通过某种方式递归地完成,但是我仍然没有真正理解这个概念:(这是我能想到的最好的方法。我不确定它可以处理多少个数字,当我输入一百时,它是否可以工作数字。


1
投票


1
投票

注:


0
投票

两位数:使用ECMAScript 6(ES6)需要两个或多个数字的简单功能:


0
投票

问题陈述:不使用string.length()的计数数字/字符串

© www.soinside.com 2019 - 2024. All rights reserved.