我想在 JavaScript 或 jQuery 中获取数字的长度?
我试过value.length
没有任何成功,我需要先将它转换为字符串吗?
我想在 JavaScript 或 jQuery 中获取数字的长度?
我试过value.length
没有任何成功,我需要先将它转换为字符串吗?
var x = 1234567;
x.toString().length;
这个过程也将努力为Float Number
和Exponential number
也。
好吧,这么多答案,但这是一个纯粹的数学问题,只是为了好玩或记住数学很重要:
var len = Math.ceil(Math.log(num + 1) / Math.LN10);
这实际上给出了数字的“长度”,即使它是指数形式的。num
在这里应该是一个非负整数:如果它是负数,则取其绝对值并在之后调整符号。
现在这Math.log10
是一件事,你可以简单地写
const len = Math.ceil(Math.log10(num + 1));
也可以使用模板字符串:
const num = 123456
`${num}`.length // 6
你必须把数字串起来才能取长度
var num = 123;
alert((num + "").length);
或者
alert(num.toString().length);
我一直在 node.js 中使用这个功能,这是我迄今为止最快的实现:
var nLength = function(n) {
return (Math.log(Math.abs(n)+1) * 0.43429448190325176 | 0) + 1;
}
它应该处理正整数和负整数(也是指数形式),并且应该以浮点数形式返回整数部分的长度。
以下参考资料应提供对该方法的一些见解: Weisstein, Eric W.“Number Length”。来自 MathWorld--Wolfram Web 资源。
我相信一些按位运算可以代替 Math.abs,但是 jsperf 表明 Math.abs 在大多数 js 引擎中都可以正常工作。
更新:如评论中所述,此解决方案存在一些问题:(
Update2(解决方法):我相信在某些时候精度问题Math.log(...)*0.434...
会出现并且只是表现出意外。但是,如果 Internet Explorer 或移动设备不是您的菜,您可以用该Math.log10
功能替换此操作。在 Node.js 中,我使用该函数编写了一个快速的基本测试,nLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0;
并且Math.log10
它按预期工作。请注意,Math.log10
并非普遍支持。