Подтвердить что ты не робот

JavaScript: получить вторую цифру из числа?

У меня есть число, назначенное переменной, например:

var myVar = 1234;

Теперь я хочу получить вторую цифру (2 в этом случае) из этого числа, не преобразовывая ее сначала в строку. Возможно ли это?

4b9b3361

Ответ 1

Итак, вы хотите получить вторую цифру от десятичной записи числа.

Простейшим и наиболее логичным решением является преобразование его в строку:

var digit = (''+myVar)[1];

или

var digit = myVar.toString()[1];

Если вы не хотите делать это легко, или если вы хотите более эффективное решение, вы можете сделать это:

var l = Math.pow(10, Math.floor(Math.log(myVar)/Math.log(10))-1);
var b = Math.floor(myVar/l);
var digit = b-Math.floor(b/10)*10;

Демонстрация

Для людей, заинтересованных в выступлениях, я сделал jsperf. Для случайных чисел с использованием журнала, как и я, безусловно, является самым быстрым решением.

Ответ 2

Первая цифра числа справа → number % 10= Math.floor((number/1) % 10)

1234 % 10; // 4
Math.floor((1234 / 1) % 10); // 4

2-я цифра числа справа → Math.floor((number/10) % 10)

Math.floor((1234 / 10) % 10); // 3

3-я цифра справа → Math.floor((number/100) % 10)

Math.floor((1234 / 100) % 10); // 2

n-я цифра числа справа → Math.floor((number/10^n-1) % 10)

function getDigit(number, n) {
  return Math.floor((number / Math.pow(10, n - 1)) % 10);
}

количество цифр в номере → Math.max(Math.floor(Math.log10(Math.abs(number))), 0) + 1 Кредит для: fooobar.com/questions/88945/...

function getDigitCount(number) {
  return Math.max(Math.floor(Math.log10(Math.abs(number))), 0) + 1;
}

n-ая цифра числа слева или справа

function getDigit(number, n, fromLeft) {
  const location = fromLeft ? getDigitCount(number) + 1 - n : n;
  return Math.floor((number / Math.pow(10, location - 1)) % 10);
}

Ответ 3

Избавьтесь от завершающих цифр, разделив число на 10, пока число не станет меньше 100, в цикле. Затем выполните по модулю с 10, чтобы получить вторую цифру.

if (x > 9) {
    while (x > 99) {
        x = (x / 10) | 0;  // Use bitwise '|' operator to force integer result.
    }
    secondDigit = x % 10;
}
else {
    // Handle the cases where x has only one digit.
}

Ответ 4

"Число" - это одно.

Представление этого числа (например, строка base-10 "1234" ) - это еще одна вещь.

Если вам нужна определенная цифра в десятичной строке... тогда лучше всего ее получить из строки:)

Q: Вы знаете, что в Javascript есть ловушки с целочисленной арифметикой, правильно?

Q: Почему так важно не использовать строку? Это домашнее задание? Вопрос интервью?

Ответ 5

Знаешь, я понял, что вопрос спрашивает, как это сделать без номера, но заголовок "JavaScript: получить вторую цифру из числа?" означает, что многие люди найдут этот ответ, когда ищут способ получить конкретную цифру, период.

Я не избиваю первоначального вопросника, я уверен, что у него были свои причины, но с точки зрения практичности поиска я думаю, что стоит добавить здесь ответ, который преобразует число в строку и обратно, потому что, если ничего другого, это гораздо более тонкий и легкий способ понять это.

let digit = Number((n).toString().split('').slice(1,1))

// e.g.
let digit = Number((1234).toString().split('').slice(1,1)) // outputs 2

Получение цифры без преобразования строк велико, но когда вы пытаетесь написать четкий и сжатый код, который другие люди и будущее могут выглядеть очень быстро и полностью, я думаю, что быстрое преобразование строк одним лайнером является лучший способ сделать это.

Ответ 6

function getNthDigit(val, n){
    //Remove all digits larger than nth
    var modVal = val % Math.pow(10,n);

    //Remove all digits less than nth
    return Math.floor(modVal / Math.pow(10,n-1));
}

// tests
[
  0, 
  1, 
  123, 
  123456789, 
  0.1, 
  0.001
].map(v => 
  console.log([
      getNthDigit(v, 1),
      getNthDigit(v, 2),
      getNthDigit(v, 3)
    ]
  ) 
);

Ответ 7

Я не знаю, зачем вам нужна эта логика, но после логики вы получите второе число

<script type="text/javascript">
    var myVal = 58445456;
    var var1 = new Number(myVal.toPrecision(1));
    var var2 = new Number(myVal.toPrecision(2));     
    var rem;
    rem = var1 - var2;
    var multi = 0.1;
    var oldvalue;
    while (rem > 10) {
        oldvalue = rem;
        rem = rem * multi;
        rem = rem.toFixed();           
    }
    alert(10-rem);       
</script>

Ответ 8

function getDigit(number, indexFromRight) { 
            var maxNumber = 9
            for (var i = 0; i < indexFromRight - 2; i++) {
                maxNumber = maxNumber * 10 + 9
            }
            if (number > maxNumber) {
                number = number / Math.pow(10, indexFromRight - 1) | 0
                return number % 10
            } else
                return 0
        }

Ответ 9

Просто простая идея вернуть любой чартер из числа в виде строки или целого числа:

const myVar = 1234;
String(myVar).charAt(1)
//"2"
parseInt(String(myVar).charAt(1))
//2

Ответ 10

var newVar = myVar;
while (newVar > 100) {
    newVar /= 10;
}

if (newVar > 0 && newVar < 10) {
   newVar = newVar;
}

else if (newVar >= 10 && newVar < 20) {
   newVar -= 10;
}

else if (newVar >= 20 && newVar < 30) {
   newVar -= 20;
}

else if (newVar >= 30 && newVar < 40) {
   newVar -= 30;
}

else if (newVar >= 40 && newVar < 50) {
   newVar -= 40;
}

else if (newVar >= 50 && newVar < 60) {
   newVar -= 50;
}

else if (newVar >= 60 && newVar < 70) {
   newVar -= 60;
}

else if (newVar >= 70 && newVar < 80) {
   newVar -= 70;
}

else if (newVar >= 80 && newVar < 90) {
   newVar -= 80;
}

else if (newVar >= 90 && newVar < 100) {
   newVar -= 90;
}

else {
   newVar = 0;
}

var secondDigit = Math.floor(newVar);

Вот как я это сделаю:)

И здесь JSFiddle показывает, что он работает:) http://jsfiddle.net/Cuytd/

Это также предполагает, что ваш исходный номер всегда больше 9... Если он не всегда больше 9, то, думаю, вы не будете задавать этот вопрос;)