使用JavaScript获取数字的位数

183

正如我帖子的标题所示,我想知道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的错误?


1
12/2021 - 在数字前添加引号,例如(number+'').length,将自动将内容转换为字符串,然后您可以使用.length - Mohamed Reda
20个回答

1
问题陈述:计算不使用string.length() js函数的数字/字符串数量。 解决方案:我们可以通过For循环来实现。例如:
for (x=0; y>=1 ; y=y/=10){
  x++;
}

if (x <= 10) {
  this.y = this.number;                
}   

else{
  this.number = this.y;
}    

}


1

虽然并没有直接回答这个问题,但如果你想要知道一个数字的小数部分的长度(例如:1.35 => 21 => 0),这可能会对你有所帮助:

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

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

1
`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));

1
请使用以下表达式来获取数字的长度。
length = variableName.toString().length

0
两个数字:在你需要使用ECMAScript 6(ES6)的两个或更多数字的情况下,可以使用简单函数。
const zeroDigit = num => num.toString().length === 1 ? `0${num}` : num;

0
一个同时适用于负数和浮点数的解决方案,且不调用任何昂贵的字符串操作函数:
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
   }
}

0

对于整数位,我们也可以通过连续除以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))


这对于负数和浮点数都不起作用。 - Caltrop

0

这是我的解决方案。它适用于正数和负数。 希望这可以帮到你。

function findDigitAmount(num) {

   var positiveNumber = Math.sign(num) * num;
   var lengthNumber = positiveNumber.toString();

 return lengthNumber.length;
}


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

0

这里有一个正确的数学答案(使用对数)并且解释得很好:

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

等等


-7

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

3
这并没有回答这个问题。 - Steve Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接