bit*_*fox 103 javascript count digits
正如我的帖子标题所示,我想知道有多少位数var number.例如:如果number = 15;我的函数应该返回2.目前,它看起来像这样:
function getlength(number) {
return number.toString().length();
}
Run Code Online (Sandbox Code Playgroud)
但Safari表示,由于TypeError:
'2' is not a function (evaluating 'number.toString().length()')
Run Code Online (Sandbox Code Playgroud)
如您所见,'2'实际上是正确的解决方案.但为什么呢not a function?
Vis*_*ioN 204
length是一种财产,而不是一种方法.你无法调用它,因此你不需要括号():
function getlength(number) {
return number.toString().length;
}
Run Code Online (Sandbox Code Playgroud)
更新:如评论中所述,上述示例不适用于浮点数.为了使它工作,我们可以String(number).replace('.', '').length用正则表达式去掉句号,或者用正则表达式计算数字:String(number).match(/\d/g).length.
就速度而言,获得给定数字中数字位数的最快方法是以数学方式进行.对于正整数,有一个很好的算法log10:
var length = Math.log(number) * Math.LOG10E + 1 | 0; // for positive integers
Run Code Online (Sandbox Code Playgroud)
对于所有类型的整数(包括底片),有一个来自@ Mwr247的精彩优化解决方案,但要小心使用Math.log10,因为许多传统浏览器不支持它.因此,更换Math.log10(x)与Math.log(x) * Math.LOG10E将解决兼容性问题.
由于浮点数学的众所周知的行为,为十进制数创建快速数学解决方案并不容易,因此逐行方法将更容易和万无一失.正如@streetlogics所提到的,快速转换可以通过简单的数字到字符串连接来完成,导致替换解决方案被转换为:
var length = (number + '').replace('.', '').length; // for floats
Run Code Online (Sandbox Code Playgroud)
Mwr*_*247 58
这是一个数学答案(也适用于负数):
function numDigits(x) {
return Math.max(Math.floor(Math.log10(Math.abs(x))), 0) + 1;
}
Run Code Online (Sandbox Code Playgroud)
以及上面的优化版本(更高效的按位操作):
function numDigits(x) {
return (Math.log10((x ^ (x >> 31)) - (x >> 31)) | 0) + 1;
}
Run Code Online (Sandbox Code Playgroud)
基本上,我们首先获取输入的绝对值,以允许负值正常工作.然后我们通过log10操作来给出输入的10的幂(如果你在另一个基础上工作,你将使用该基数的对数),这是数字的位数.然后我们将输出置于仅获取整数部分.最后,我们使用max函数来固定十进制值(0到1之间的任何小数值只返回1而不是负数),并在最终输出中加1以获得计数.
以上假设(根据您的示例输入)您希望计算整数中的位数(因此12345 = 5,因此12345.678 = 5).如果您想计算值中的总位数(所以12345.678 = 8),那么在上面任一函数中的'return'之前添加它:
x = Number(String(x).replace(/[^0-9]/g, ''));
Run Code Online (Sandbox Code Playgroud)
str*_*ics 19
由于这是在谷歌上搜索"javascript get number of digits",我想把它扔到那里,有一个更短的替代方案,依赖于内部转换为你完成:
var int_number = 254;
var int_length = (''+int_number).length;
var dec_number = 2.12;
var dec_length = (''+dec_number).length;
console.log(int_length, dec_length);
Run Code Online (Sandbox Code Playgroud)
产量
3 4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
160766 次 |
| 最近记录: |