6

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

4

9 回答 9

11

怎么样

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

}
于 2010-12-23T23:16:05.257 回答
11
Math.floor((256 / 10) % 10)

或更一般地说:

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

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

于 2010-12-23T23:16:10.810 回答
6

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

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

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

于 2010-12-23T23:16:28.723 回答
0

这应该这样做:

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
}
于 2010-12-23T23:15:51.550 回答
0

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

于 2010-12-23T23:16:01.017 回答
0

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

var number = 12345;
var n = 2;
var nDigit = parseInt((number + '').substr(1,1));
于 2010-12-23T23:16:49.657 回答
0
// 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))
}
于 2010-12-23T23:45:16.250 回答
0

如果您想尝试以数学方式进行所有操作:

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)

于 2010-12-23T23:51:38.340 回答
0

使用变量“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

于 2015-09-03T03:42:34.143 回答