我要在JavaScript或jQuery中获得一个数字的长度?
我尝试过价值。长度没有任何成功,我需要先将其转换为字符串吗?
我要在JavaScript或jQuery中获得一个数字的长度?
我尝试过价值。长度没有任何成功,我需要先将其转换为字符串吗?
当前回答
我一直在node.js中使用这个功能,这是我目前为止最快的实现:
var nLength = function(n) {
return (Math.log(Math.abs(n)+1) * 0.43429448190325176 | 0) + 1;
}
它应该处理正整数和负整数(也是指数形式),并应该以浮点数形式返回整数部分的长度。
下面的参考文献应该提供一些关于该方法的见解: Eric Weisstein;“数字长度。”来自MathWorld—Wolfram Web资源。
我相信一些位操作可以取代数学。但是jsperf显示Math. abs。Abs在大多数js引擎中工作得很好。
更新:正如评论中提到的,这个解决方案有一些问题:(
Update2(解决方案):我相信在某些时候精度问题开始出现,Math.log(…)*0.434…只是表现出人意料。但是,如果Internet Explorer或移动设备不是你的菜,你可以用Math代替这个操作。log10函数。在Node.js中,我写了一个快速的基本测试函数nLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0;还有数学。Log10它像预期的那样工作。请注意数学。Log10不是普遍支持的。
其他回答
一种用于整数或整数部分长度的方法,无需将其常规转换为字符串:
var num = 9999999999; // your number
if (num < 0) num = -num; // this string for negative numbers
var length = 1;
while (num >= 10) {
num /= 10;
length++;
}
alert(length);
是的,你需要转换为字符串,以找到长度。例如
var x=100;// type of x is number
var x=100+"";// now the type of x is string
document.write(x.length);//which would output 3.
var x = 1234567;
x.toString().length;
这个过程也适用于浮点数和指数数。
我想纠正@Neal的答案,这对整数来说很好,但在前一种情况下,数字1将返回0的长度。
function Longueur(numberlen)
{
var length = 0, i; //define `i` with `var` as not to clutter the global scope
numberlen = parseInt(numberlen);
for(i = numberlen; i >= 1; i)
{
++length;
i = Math.floor(i/10);
}
return length;
}
有三种方法。
var num = 123;
alert(num.toString().length);
性能一(ie11中性能最好)
var num = 123;
alert((num + '').length);
数学(在Chrome和firefox中表现最好,但在ie11中最慢)
var num = 123
alert(Math.floor( Math.log(num) / Math.LN10 ) + 1)
这里有一个jspref http://jsperf.com/fastest-way-to-get-the-first-in-a-number/2