【问题标题】:get the number of n digit in a 2+ digit number获取 2+ 位数字中的 n 位数字
【发布时间】:2010-12-23 23:11:35
【问题描述】:

例如,在“256”中得到“5”。我得到的最接近的是 Math.floor(256/10)),但这仍然会返回前面的数字。有什么简单的方法可以得到我想要的东西,还是我必须为它做一个大的功能?此外,为清楚起见:将定义“n 位”。例如,getDigit(2,256) 将返回 5(第二个数字)

【问题讨论】:

  • 您没有指定是从左数还是从右数。
  • 许多答案将值作为字符串而不是整数返回。这有关系吗?

标签: javascript numbers digit


【解决方案1】:
Math.floor((256 / 10) % 10)

或更笼统地说:

Math.floor(N / (Math.pow(10, n)) % 10)

其中N 是要提取的数字,n 是数字的位置。请注意,这从 0 开始从右侧开始计数(即最低有效位 = 0),并且不考虑 n 的无效值。

【讨论】:

  • 概括不正确。只需设置 n=2 自己看看。
  • @Martin v. Löwis:谢谢。写这篇文章的那一刻,我分心了。
  • 嗯。这仍然不正确:您缺少右括号,并且“% n”可能应该读为“% 10”。
  • @Martin v. Löwis:是的,这就是我的意思。再次感谢。
  • 我在 URL 栏中使用 javascript: 对此进行了测试,它对我有用。我还想使用一种公式(完全像这样)而不是字符串,所以这是我更喜欢的答案。
【解决方案2】:

怎么样

(12345 + "")[3] 

(12345 + "").charAt(3)

从另一端开始计数

[length of string - digit you want] 所以如果你想要 2 它是:

5 - 4 = 1 
(12345 + "")[1] = "2"


function getNumber (var num, var pos){
  var sNum = num + "";

  if(pos > sNum.length || pos <= 0){return "";}

  return sNum[sNum.length - pos]; 

}

【讨论】:

  • 很可能,OP 想从另一端开始计数。
【解决方案3】:

首先,您需要将数字转换为字符串,然后您可以正常访问该字符:

var num = 256;
var char = num.toString()[1]; // get the 2nd (0-based index) character from the stringified version of num

编辑:还要注意,如果你想在不先将数字设置为变量的情况下访问它,你需要一个双点..来访问函数:

var char = 256..toString()[1];

第一个点告诉解释器“这是一个数字”;第二个访问函数。

【讨论】:

  • 很可能,OP 想从另一端开始计数。
  • 我希望它从小到大计数。
【解决方案4】:

转换成字符串和子字符串(2,2)?

【讨论】:

    【解决方案5】:

    应该这样做:

    function getDigit ( position, number ) {
      number = number + ""; // convert number to string
      return number.substr ( position + 1, 1 ); // I'm adding 1 to position, since 0 is the position of the first character and so on
    }
    

    【讨论】:

      【解决方案6】:

      试试这个,最后一行是关键:

      var number = 12345;
      var n = 2;
      var nDigit = parseInt((number + '').substr(1,1));
      

      【讨论】:

      • charAt(1) 看起来比 substr(1,1) 更好:)
      【解决方案7】:

      如果你想尝试用数学方法做所有事情:

      var number = 256;
      var digitNum = 2;
      var digit = ((int)(number/(Math.pow(10,digitNum-1))%10;
      

      此代码从 1 开始计算数字,而不是 0。如果您希望将其更改为从 0 开始,请删除调用中的 -1 部分。

      如果你想从左边数,它会变得更复杂,并且与其他解决方案相似:

      var number = 256;
      var digitNum = 2;
      var digit = ((int)(number/(Math.pow(10,number.tostring().length-digitNum))%10;
      

      编辑:

      此外,这假设您的数字系统需要以 10 为基数,但是这两者都可以与其他基数一起使用。您需要做的就是将最后一行代码中的 10 实例更改为代表您要使用的数字系统的基数的数字。 (即十六进制=16,二进制=2)

      【讨论】:

        【解决方案8】:
        // You do not say if you allow decimal fractions or negative numbers- 
        // the strings of those need adjusting.
        
        Number.prototype.nthDigit= function(n){
            var s= String(this).replace(/\D+/g,'');
            if(s.length<=n) return null;
            return Number(s.charAt(n))
        }
        

        【讨论】:

          【解决方案9】:

          使用变量“count”来控制循环

          var count = 1; //starting 1
          for(i=0; i<100; i++){
            console.log(count);
            if(i%10 == 0) count++;
          }
          

          输出将填满 1 2 3 4 5 6 7 8 9

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-21
            • 2015-12-04
            • 1970-01-01
            • 2015-09-20
            • 1970-01-01
            • 2018-06-23
            相关资源
            最近更新 更多