使用 JavaScript 获取位数

Get number of digits with JavaScript

本文关键字:获取 JavaScript 使用      更新时间:2023-09-26

正如我帖子的标题所暗示的那样,我想知道var number有多少位数。例如:如果number = 15;我的函数应该返回2 .目前,它看起来像这样:

function getlength(number) {
  return number.toString().length();
}

但是Safari说由于TypeError而无法正常工作:

'2' is not a function (evaluating 'number.toString().length()')

如您所见,'2'实际上是正确的解决方案。但为什么not a function呢?

length是一个

属性,而不是一个方法。你不能调用它,因此你不需要括号()

function getlength(number) {
    return number.toString().length;
}

更新:如评论中所述,上述示例不适用于浮点数。为了使它工作,我们可以去掉一个带有 String(number).replace('.', '').length 的句点,或者用正则表达式计算数字:String(number).match(/'d/g).length

就速度而言,获得给定数字位数的最快方法是用数学方式进行。对于正整数,有一个很棒的算法,log10

var length = Math.log(number) * Math.LOG10E + 1 | 0;  // for positive integers

对于所有类型的整数(包括负数(,@Mwr247有一个出色的优化解决方案,但要小心使用 Math.log10 ,因为许多旧版浏览器不支持它。因此,用Math.log(x) * Math.LOG10E替换Math.log10(x)将解决兼容性问题。

由于浮点数学的众所周知的行为,为十进制数创建快速数学解决方案并不容易,因此投射到字符串的方法将更加简单和万无一失。如@streetlogics所述,快速转换可以通过简单的数字到字符串连接来完成,导致替换解决方案转换为:

var length = (number + '').replace('.', '').length;  // for floats

这是一个数学答案(也适用于负数(:

function numDigits(x) {
  return Math.max(Math.floor(Math.log10(Math.abs(x))), 0) + 1;
}

以及上述的优化版本(更高效的按位运算(: *

function numDigits(x) {
  return (Math.log10((x ^ (x >> 31)) - (x >> 31)) | 0) + 1;
}

本质上,我们首先获取输入的绝对值,以允许负值正常工作。然后我们运行log10运算,给我们输入的 10 的幂(如果你在另一个基数中工作,你将使用该基数的对数(,即位数。然后,我们将输出地板设置为仅获取其中的整数部分。最后,我们使用 max 函数来固定十进制值(0 到 1 之间的任何小数值都只返回 1,而不是负数(,并将 1 加到最终输出以获得计数。

上面假设(基于您的示例输入(您希望计算整数中的位数(因此 12345 = 5,因此 12345.678 = 5(。如果您想计算值中的总位数(因此 12345.678 = 8(,请在上述任一函数中的"return"之前添加以下内容:

x = Number(String(x).replace(/[^0-9]/g, ''));
<小时 />

* 请注意,JavaScript 中的按位运算仅适用于32 位值(最大值为 2,147,483,647(。因此,如果您期望数字大于该数字,请不要使用按位版本,否则它根本不起作用。

由于这是在谷歌搜索"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);

收益 率

3 4

长度设为

  `${NUM}`.length

其中 NUM 是获取长度的数字

您可以在此技巧中使用:

(''+number).length

var i = 1;
while( ( n /= 10 ) >= 1 ){ i++ }

23432          i = 1
 2343.2        i = 2
  234.32       i = 3
   23.432      i = 4
    2.3432     i = 5
    0.23432

您可以使用

Math.abs 函数将负数转换为正数并保持正数不变。 然后,您可以将数字转换为字符串并提供长度。

Math.abs(num).toString().length;

我发现这种方法最简单,效果很好。 但是,如果您确定会提供正数,则可以将其转换为字符串,然后使用长度。

num.toString().length

如果您需要数字(在分隔符之后(,您可以简单地拆分数字并计算第二部分的长度(点之后(。

function countDigits(number) {
    var sp = (number + '').split('.');
    if (sp[1] !== undefined) {
        return sp[1].length;
    } else {
        return 0;
    }
}

我仍然在学习Javascript,但我不久前在C中提出了这个函数,它使用数学和while循环而不是字符串,所以我为Javascript重写了它。也许这可以以某种方式递归完成,但我仍然没有真正掌握这个概念:(这是我能想到的最好的。我不确定它能处理多大的数字,当我输入一百位数字时,它就起作用了。

function count_digits(n) {
    numDigits = 0;
    integers = Math.abs(n);
    while (integers > 0) {
        integers = (integers - integers % 10) / 10;
        numDigits++;
    }
    return numDigits;
}

编辑:仅适用于整数值

注意:此函数将忽略小数点后的数字,如果要用小数计数,请删除Math.floor()。直接切中要害,看看这个!

function digitCount ( num )
{
     return Math.floor( num.toString()).length;
}
 digitCount(2343) ;

ES5+

 const digitCount2 = num => String( Math.floor( Math.abs(num) ) ).length;
 console.log(digitCount2(3343))

基本上这是怎么回事。 toString()String()相同的内置函数将数字转换为字符串,一旦我们转换,我们将通过内置函数length找到字符串的长度。

警报:但是此功能无法正常工作负数,如果您尝试玩负数,请检查此答案或简单地Math.abs()放入其中;

为你加油!

问题陈述:不使用string.length(( jsfunction计算数字/字符串。解决方案:我们可以通过Forloop来做到这一点。例如

for (x=0; y>=1 ; y=y/=10){
  x++;
}
if (x <= 10) {
  this.y = this.number;                
}   
else{
  this.number = this.y;
}    

}

`You can do it by simple loop using Math.trunc() function. if in interview interviewer ask to do it without converting it into string`
    let num = 555194154234 ;
    let len = 0 ;
    const numLen = (num) => {
     for(let i = 0; i < num ||  num == 1 ; i++){
        num = Math.trunc(num/10);
        len++ ;
     }
      return len + 1 ;
    }
    console.log(numLen(num));

请使用以下表达式获取数字的长度。

length = variableName.toString().length
<</div> div class="answers">

虽然在技术上没有回答这个问题,但如果您正在寻找数字小数部分的长度(例如 1.35 => 21 => 0 (,这可能有助于您:

function fractionalDigitLength(num) {
  if (Number.isInteger(num)) return 0;
  return String(num).split('.')[1].length;
}

注意:我在这里发布的原因是因为我认为谷歌搜索这个答案的人可能也想要一个解决方案,只获取数字的小数长度。

两位数:简单的函数,如果你需要 ECMAScript 6 (ES6( 的两个或更多个数字:

const zeroDigit = num => num.toString().length === 1 ? `0${num}` : num;

这是我的解决方案。它适用于正数和负数。希望这有帮助

function findDigitAmount(num) {
   var positiveNumber = Math.sign(num) * num;
   var lengthNumber = positiveNumber.toString();
 return lengthNumber.length;
}

(findDigitAmount(-96456431);    // 8
(findDigitAmount(1524):         // 4

一种解决方案,也适用于负数和浮点数,并且不调用任何昂贵的字符串操作函数:

function getDigits(n) {
   var a = Math.abs(n);            // take care of the sign
   var b = a << 0;                 // truncate the number
   if(b - a !== 0) {               // if the number is a float
       return ("" + a).length - 1; // return the amount of digits & account for the dot
   } else {
       return ("" + a).length;     // return the amount of digits
   }
}

对于 interger digit,我们也可以实现连续除以 10 :

var getNumberOfDigits = function(num){
    var count = 1;
    while(Math.floor(num/10) >= 1){
        num = Math.floor(num/10);
        ++count;
    }
    return count;
}
console.log(getNumberOfDigits(1))
console.log(getNumberOfDigits(12))
console.log(getNumberOfDigits(123))

这里有一个正确的数学答案(使用对数(,也得到了很好的解释:

function numberOfDigitsInIntegerPart(numberToGetDigitsFor: number): number {
    const valueWithoutNegative = Math.abs(numberToGetDigitsFor);
    if (valueWithoutNegative === 0) {
        // Math.log10(0) === -Infinity
        return 1;
    }
    if (valueWithoutNegative > 0 && valueWithoutNegative < 1) {
        // Math.log10(0.1) === -1
        // Math.log10(0.2) === -0.6989700043360187
        // etc
        return 1;
    }
    if (valueWithoutNegative === 1) {
        // Math.log10(1) === 0
        return 1;
    }
    // Math.log10(1.1) === 0.04139268515822507
    // Math.log10(2000) === 3.3010299956639813
    // Math.log10(10000) ==== 4
    // etc
    const powerToWhich10MustBeExponentiatedToGetValue = Math.log10(valueWithoutNegative);
    const closestRoundPowerBelowExponentationToGetValue = Math.floor(powerToWhich10MustBeExponentiatedToGetValue);
    return closestRoundPowerBelowExponentationToGetValue + 1;
}

对于那些忘记了高中数学课的人来说,对数是权力的对立面(我知道我在写这个答案之前有过(是权力的对立面。 Math.log10(x)问"我需要将 10 乘以什么幂才能得到 x"?

所以

Math.log10(100(

将为 2,因为 10^2 (10x10( 为 100,

Math.log10(1000(

将为 3,因为 10^3 (10x10x10( 为 1000

length 属性返回字符串的长度(字符数(。

空字符串的长度为 0。

var str = "Hello World!";
var n = str.length;

n 的结果将是:12

    var str = "";
    var n = str.length;

n 的结果将是:0


数组长度属性:


length 属性设置或返回数组中的元素数。

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.length;

其结果将是 :4

语法:

返回数组的长度:

array.length

设置数组的长度:

array.length=number