получить число из n цифр в 2+ цифровом числе

Например, получить «5» в «256». Самое близкое, что я получил, это Math.floor(256/10)), но это все равно вернет числа впереди. Есть ли простой способ получить то, что я хочу, или мне придется сделать для этого большую функцию? Кроме того, для ясности: будет определена «цифра n». Например, getDigit(2,256) вернет 5 (вторая цифра).


person Anonymous    schedule 23.12.2010    source источник
comment
Вы не указали, считаете ли вы слева или справа.   -  person Martin v. Löwis    schedule 24.12.2010
comment
Многие ответы возвращают значение в виде строки, а не целого числа. Это имеет значение?   -  person Dan Breslau    schedule 24.12.2010


Ответы (8)


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

или в более общем плане:

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

где N — число, которое нужно извлечь, а n — позиция цифры. Обратите внимание, что это считается с 0, начиная справа (т. е. младшая значащая цифра = 0), и не учитывает недопустимые значения n.

person Dan Breslau    schedule 23.12.2010
comment
Обобщение неверно. Просто поставьте n=2, чтобы убедиться в этом. - person Martin v. Löwis; 24.12.2010
comment
@Мартин против Лёвиса: Спасибо. Я был отвлечен в тот момент, когда писал это. - person Dan Breslau; 24.12.2010
comment
Хм. Это по-прежнему неверно: вам не хватает закрывающих скобок, а % n, скорее всего, должно читаться как % 10. - person Martin v. Löwis; 24.12.2010
comment
@Martin v. Löwis: Да, это то, что я имел в виду. Спасибо еще раз. - person Dan Breslau; 24.12.2010
comment
Я проверил это с помощью javascript: в строке URL, и это сработало для меня. Я также хотел использовать своего рода формулу (именно такую), а не строки, поэтому это мой предпочтительный ответ. - person Anonymous; 24.12.2010

как насчет

(12345 + "")[3] 

or

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

}
person kemiller2002    schedule 23.12.2010
comment
Скорее всего, ОП хочет считать с другого конца. - person Martin v. Löwis; 24.12.2010

Во-первых, вам нужно привести число к строке, затем вы можете получить доступ к символу как обычно:

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

Первая точка сообщает интерпретатору «это число»; второй обращается к функции.

person lonesomeday    schedule 23.12.2010
comment
Скорее всего, ОП хочет считать с другого конца. - person Martin v. Löwis; 24.12.2010
comment
Я бы хотел, чтобы он считался от меньшего к большему. - person Anonymous; 24.12.2010

Преобразовать в строку и подстроку (2,2)?

person Mud    schedule 23.12.2010

Это должно сделать это:

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
}
person Jan Hančič    schedule 23.12.2010

Попробуйте это, последняя строка является ключевой:

var number = 12345;
var n = 2;
var nDigit = parseInt((number + '').substr(1,1));
person Orbling    schedule 23.12.2010
comment
charAt(1) выглядит лучше, чем substr(1,1) для этой цели :) - person dheerosaur; 24.12.2010

Если вы хотите попытаться сделать все математически:

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)

person Matt    schedule 23.12.2010

используйте переменную "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

person hellovietnam    schedule 03.09.2015