Получите количество n цифры в 2+ цифрном номере
-
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