JavaScript中的数字长度
我期待在javascript / jquery中获得一个数字的长度
我试过没有任何成功value.length
,我需要先将其转换为string?
var x = 1234567; x.toString().length;
这个过程也适用于Float Number
和Exponential 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.