Как выбрать n-ю цифру в большом целое внутри javascript?

Когда я хочу выбрать n-й символ, я использую метод charAt(), но какой эквивалент я могу использовать при работе с целыми числами вместо строковых значений?

Ответ 1

Используйте String():

var number = 132943154134;

// convert number to a string, then extract the first digit
var one = String(number).charAt(0);

// convert the first digit back to an integer
var one_as_number = Number(one); 

Ответ 2

Это глупое решение, но, похоже, работает без преобразования в строку.

var number = 123456789;
var pos = 4;
var digit = ~~(number/Math.pow(10,pos))- ~~(number/Math.pow(10,pos+1))*10;

Ответ 3

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

parseInt((number + '').charAt(0))

Ответ 4

Если вы хотите использовать существующий метод, преобразуйте его в строку и используйте charAt.

Если вы хотите использовать метод, позволяющий преобразовать его в строку, вы можете играть в игры с делением на 10 раз, чтобы отделить достаточное количество цифр справа - скажем, для 123456789, если вам нужна цифра 3-го справа (6), разделите на 10 3 раза, получив 123456, затем возьмите результат mod 10, дающий 6. Если вы хотите начать подсчет цифр слева, что вы, вероятно, делаете, то вам нужно знать, сколько цифр (база 10) во всем количестве, которое вы могли бы вывести из базы 10 журнала номера... Все это вряд ли будет более эффективным, чем просто преобразование его в строку.

Ответ 5

function digitAt(val, index) {
  return Math.floor(
    (
       val / Math.pow(10, Math.floor(Math.log(Math.abs(val)) / Math.LN10)-index)
    )
     % 10
  );
};

digitAt(123456789, 0) // => 1
digitAt(123456789, 3) // => 4

Немного беспорядочно.

Math.floor(Math.log(Math.abs(val)) / Math.LN10)

Вычисляет количество цифр (-1) в числе.

Ответ 6

var num = 123456;
var secondChar = num.toString()[1]; //get the second character

Ответ 7

в JQuery

var number = 123456789

function return_digit(n){
   r = number.toString().split('')[n-1]*1;
   return r;
}

return_digit(3); /* returns 3 */
return_digit(6); /* returns 6 */