JavaScript中的数字长度

我期待在javascript / jquery中获得一个数字的长度

我试过没有任何成功value.length ,我需要先将其转换为string?

 var x = 1234567; x.toString().length; 

这个过程也适用于Float NumberExponential number

好吧,这么多的答案,但这是一个纯粹的math,只是为了好玩或记住math是重要的:

 var len = Math.ceil(Math.log(num + 1) / Math.LN10); 

这实际上给出了数字的“长度”,即使它是指数forms。 num在这里应该是一个非负的整数:如果它是负的,取其绝对值,然后调整符号。

我一直在node.js中使用这个function,这是迄今为止我最快的实现:

 var nLength = function(n) { return (Math.log(Math.abs(n)+1) * 0.43429448190325176 | 0) + 1; } 

它应该处理正整数和负整数(也是指数forms),并且应该返回浮点数中整数部分的长度。

下面的参考文献应该提供一些方法的见解: Weisstein,Eric W.“Number Length”。 来自MathWorld – 一个Wolframnetworking资源。

我相信一些按位操作可以代替Math.abs,但是jsperf表明Math.abs在大多数js引擎中工作得很好。

更新 :正如在评论中指出的,这个解决scheme有一些问题 🙁

Update2(解决方法) :我相信,在某些时候精度问题踢了Math.log(...)*0.434...只是performanceMath.log(...)*0.434... 。 但是,如果Internet Explorer或移动设备不是您的一杯茶,您可以使用Math.log10函数replace此操作。 在Node.js中,我用函数nLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0;写了一个快速基本testingnLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0; nLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0;Math.log10它按预期工作。 请注意, Math.log10并不普遍支持。

你必须把这个数字串起来才能保持长度

 var num = 123; alert((num + "").length); 

要么

 alert(num.toString().length); 

首先将其转换为string:

 var mynumber = 123; alert((""+mynumber).length); 

向它添加一个空string将隐式地导致mynumber变成一个string。

那么没有把整数转换成string,你可以做一个时髦的循环:

 var number = 20000; var length = 0; for(i = number; i > 1; ++i){ ++length; i = Math.floor(i/10); } alert(length);​ 

演示: http : //jsfiddle.net/maniator/G8tQE/

有三种方法可以做到这一点。

 var num = 123; alert(num.toString().length); 

更好的performance之一(在ie11中performance最好)

 var num = 123; alert((num + '').length); 

math(在Chrome中最好的performance,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

我想纠正对于整数非常好的@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; } 

尝试这个:

 $("#element").text().length; 

它正在使用的示例

三种不同的方法都具有变化速度。

 // 34ms let weissteinLength = function(n) { return (Math.log(Math.abs(n)+1) * 0.43429448190325176 | 0) + 1; } // 350ms let stringLength = function(n) { return n.toString().length; } // 58ms let mathLength = function(n) { return Math.ceil(Math.log(n + 1) / Math.LN10); } // Simple tests below if you care about performance. let iterations = 1000000; let maxSize = 10000; // ------ Weisstein length. console.log("Starting weissteinLength length."); let startTime = Date.now(); for (let index = 0; index < iterations; index++) { weissteinLength(Math.random() * maxSize); } console.log("Ended weissteinLength length. Took : " + (Date.now() - startTime ) + "ms"); // ------- String length slowest. console.log("Starting string length."); startTime = Date.now(); for (let index = 0; index < iterations; index++) { stringLength(Math.random() * maxSize); } console.log("Ended string length. Took : " + (Date.now() - startTime ) + "ms"); // ------- Math length. console.log("Starting math length."); startTime = Date.now(); for (let index = 0; index < iterations; index++) { mathLength(Math.random() * maxSize); } 

也可以使用模板string:

const num = 123456

`$ {num}`.length // 6

是的,你需要转换为string才能find长度。例如

 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.