Как использовать Javascript для определения количества 1000, 100, 10, 1 в числе?

Вот пример того, что я пытаюсь сделать...

Допустим, у меня есть номер 73 284.

Число тысяч равно 73 (73 284 разделить на 1000).

Количество сотен равно 2 (284 разделить на 100).

Количество десятков равно 8 (84 разделить на 10).

Количество одиночек – 4 (осталось 4).

Мне нужна функция Javascript, которая возьмет число 73 284 и создаст из него 4 числа, используя указанные выше критерии.

Итак, если бы число было 73 284, я бы передал это число в функцию в качестве параметра, и функция вернула бы массив, который выглядит следующим образом: [73,2,8,4].

Я попытался использовать функцию Math.round(). Казалось, что это работает для тысяч, но не обязательно для сотен, десятков и одиночных.

I tried to use the Math.round() function. It seemed to work for the thousands, but not necessarily for the hundreds, tens, and singles.: пожалуйста, покажите, что вы пробовали.
mykaf 18.11.2022 21:38

Вы, наверное, хотите пол, а не круглый

epascarello 18.11.2022 21:38

Привет, добро пожаловать в stackoverflow. Укажите любую попытку, которую вы уже предприняли. В случае сомнений обратитесь к разделу Как спросить.

Nicolas 18.11.2022 21:38

Я изменил свое решение, включив в него арифметику, предоставленную Jamiec. Спасибо!

CodeNinja 18.11.2022 22:13
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
учебник по Javascript
учебник по Javascript
JavaScript - это язык программирования, который обычно используется для добавления интерактивности и других динамических функций на веб-сайты. Он...
Как использовать d3.js для рисования 2D SVG-элементов в приложении Angular?
Как использовать d3.js для рисования 2D SVG-элементов в приложении Angular?
D3.js - это обширная библиотека, используемая для привязки произвольных данных к объектной модели документа (DOM). Мы разберем основные варианты...
Освоение принципов SOLID в JavaScript: Пошаговое руководство
Освоение принципов SOLID в JavaScript: Пошаговое руководство
Принцип единой ответственности (SRP): класс должен иметь только одну причину для изменения. Другими словами, у него должна быть только одна...
JavaScript - For Loop
JavaScript - For Loop
Наиболее используемая компактная форма оператора цикла.
Неделя 1 - Карточки с временной шкалой
Неделя 1 - Карточки с временной шкалой
Поскольку это была первая неделя, я решил начать с простого. Предполагалось, что у меня будет временная шкала с несколькими карточками, которые можно...
3
4
57
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы можете сделать это, отслеживая, сколько тысяч, сотен и десятков у вас есть, и удаляя их по ходу дела. Немного простой арифметики.

function get(num){
      const thousands = Math.floor(num/1000)
      const hundreds = Math.floor((num-thousands*1000)/100);
      const tens = Math.floor((num-thousands*1000-hundreds*100)/10);
      const units = Math.floor(num-thousands*1000-hundreds*100-tens*10)
      return [
        thousands,
        hundreds,
        tens,
        units
      ]
}

const [th,hu,te,un] = get(73284)

console.log("Thousands=",th);
console.log("Hundreds=",hu);
console.log("Tens=",te);
console.log("Units=",un);

Ямик, спасибо большое! Это работает. Мне не хватало части «удалить их по ходу» в моем попытке решения. Еще раз спасибо!

CodeNinja 18.11.2022 22:00

Вот простой пример:

function test(num) {
  const arr = num.toLocaleString().split(',');
  arr[arr.length-1].toString().split('').map(x=>arr.push(x));
  arr[arr.length-4]=0;
  return arr.map(x=>+x).filter(x=>x);
}
test(1234); // [1,2,3,4]
test(73284); // [73,2,8,4]

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

Простой цикл.

const f = (n) => {
    let div = 1000;
    const result = [];
    for (let i = 0; i < 4 && n; i++, n %= div, div /= 10) {
        result.push(Math.floor(n / div));
    }
    return result;
}
console.log(f(73284));

Вам понадобится комбинация деления с Math.floor и оператором по модулю (%). Оператор Modulo возвращает напоминание о делении.

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

Во-первых, нам нужно получить, сколько заданных делителей у нас есть на входе. Для этого вы можете разделить его и игнорировать десятичную дробь, используя Math.floor.

const input = 73284
const divider = 1000

const amoutOfDividerInInput = input / divider .
// this returns 73.284, we don't want the .284 so we can use Math.floor.

const amountOfDividerInInputWithoutDecimal = Math.floor(amoutOfDividerInInput)

// we print the value
console.log("there are " + amountOfDividerInInputWithoutDecimal + " 1000s in " + input).

Затем нам нужно проверить, что является напоминанием об этой операции, и здесь появляется оператор по модулю.

const input = 73284
const divider = 1000

const reminderOfTheDivision = input % divider;
// this gives us 284.

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

// we devide the divider by 10, 
const newDevider = divider / 10;

// we calculate the new amount and reminder
const amoutOfNewDividerInInput = Math.floor(reminderOfTheDivision / newDivider );

const reminderOfTheNewDivision = reminderOfTheDivision % newDivider

// we print the new values
console.log("There are " + amoutOfNewDividerInInput + " 100s in" + input)

И так продолжается до тех пор, пока мы не опустимся до одной цифры.

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

Вот что я придумал.

function findDividingQuantity(reminder, divider) {
  // if the devider is less than 10, we simply print the reminder.
    if(divider < 10) {
    console.log('and ' + reminder + ' remains.');
    // and we returns to stop the recursion.
    return;
  }
  
  // otherwise, we get the current amount of the divider in the reminder.
  const amount = Math.floor(reminder / divider);
  
  // we then calculate how much is left after the first division,
  // this will become our new reminder.
  const newReminder = reminder % divider;
  
  // knowing how many of the divider there is in the input, we can print it.
  console.log(amount + " " + divider + "s.");
  
  // we call the function again, but with the new reminder
  // and the divider divided by 10
  findDividingQuantity(newReminder, divider / 10)
}

const input = 73284

console.log("In " + input + " there is: ");
// we call the function with the initial divider: 1000.
findDividingQuantity(input, 1000)

Другие вопросы по теме