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

有帮助吗?

解决方案

Math.floor((256 / 10) % 10)

或更一般:

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

在哪里 N 是要提取的数字,并且 n 是数字的位置。请注意,这是从右开始的0计数(即,数字最低= 0),并且不解释无效的值 n.

其他提示

怎么样

(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]; 

}

首先,您需要将数字投放到字符串中,然后可以正常访问字符:

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];

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

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

这应该做到:

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
}

尝试一下,最后一行是关键:

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

如果您想尝试以数学的方式完成所有操作:

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,但是两者都可以与其他基础一起使用。您需要做的就是将代码的最后一行中的10个实例更改为代表您要使用的数字系统的基础的数字。 (即十六进制= 16,二进制= 2)

// 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))
}

使用变量“计数”来控制循环

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top