Получите количество n цифры в 2+ цифрном номере

StackOverflow https://stackoverflow.com/questions/4523131

  •  12-10-2019
  •  | 
  •  

Вопрос

Например, получение «5» в «256». Ближайший, который я получил, это Math.floor (256/10)), но это все равно вернет цифры впереди. Есть ли какой -нибудь простой способ получить то, что я хочу, или мне придется сделать для этого большую функцию? Кроме того, для ясности: «n цифра» будет определена. Пример, GetDigit (2256) вернет 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 в окончательной строке кода на номер, представляющий базу для системы номеров, которую вы хотели бы использовать. (т.е. шестнадцатеричный = 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