Advertisement
Abaduaber

JS_One

Jul 5th, 2022
1,185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Тут прописаны все возможные числительные, вернее их названия на английском.
  2. //Числа до 12 включительно обладают уникальными названиями
  3. let upToTwelve = [
  4.     '', 'one', 'two', 'three', 'four', 'five', 'six', 'seven',
  5.     'eight', 'nine', 'ten', 'eleven', 'twelve'
  6. ];
  7. //Десятки. Все, что до 60 - нельзя собрать из предыдущего массива чисел от 1 до 12.
  8. //Проще создать новый для этой задачи и прописать в нем все правильно.
  9. let dozens = [
  10.     'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy',
  11.     'eighty', 'ninety'
  12. ];
  13. //Та же ситуация для чисел от 13 до 19 - прописываем отдельно
  14. let teens = [
  15.     'thir', 'four', 'fif', 'six', 'seven', 'eight', 'nine'
  16. ]
  17. //Ну и наименования для каждого 4-го разряда - тысячи, миллионы и.т.д
  18. let fourDigit = [
  19.     '', ' thousand ', ' million ', ' billion ', ' trillion '
  20. ]
  21.  
  22. function getNameOfDozens(value) {
  23.     //Принимает числа от 0 до 99, возвращая запись этих чисел в текстовом виде
  24.     var result = '';
  25.     switch (true) {
  26.         case (value < 13):
  27.             result = upToTwelve[value]; break;
  28.         case (value < 20):
  29.             result = (teens[value % 10 - 3] + 'teen'); break;
  30.         case (value < 100):
  31.             //value / 100 дает в результате операции вещественное число, по которому нельзя адресовать элемент массива
  32.             //Побитовое ИЛИ (|) конвертирует веществвенное число в целое, обрубая вещественную часть.
  33.             result = (dozens[(value / 10 | 0) - 2] + ' ' + upToTwelve[value % 10]);
  34.             break;
  35.         default:
  36.             alert("wrong value"); break;
  37.     }
  38.     return result;
  39. }
  40.  
  41. function getNameOfHundreds(value) {
  42.     //Возвращает текстовую запись чисел от 0 до 999 - стало быть все числа от 1 до 3 разряда.
  43.     //Это базовая функция, поскольку в любом крупном числе всегда есть перечисление сотен.
  44.     if (value < 100) {
  45.         return getNameOfDozens(value);
  46.     }
  47.     return upToTwelve[value / 100 | 0] + ' hundred ' + getNameOfDozens(value % 100);
  48. }
  49. 1456
  50. function getName(value) {
  51.     //Возвращает текстовую запись любого числа в пределах прописанного
  52.     var result = '';
  53.     var fourIndex = 0;
  54.     while (value > 0) {
  55.         hundreds = value % 1000;
  56.         value = value / 1000 | 0;
  57.         result = getNameOfHundreds(hundreds) + fourDigit[fourIndex] + result;
  58.         fourIndex++;
  59.     }
  60.     return result;
  61. }
  62.  
  63. function toReadable(value) {
  64.     var result = '';
  65.     //Заранее проверим на отрицательное число. Если так - запишем заранее в выходную строку слово "минус" и сделаем число положительным
  66.     if (value < 0) {
  67.         result = 'minus ';
  68.         value = -value;
  69.     }
  70.     //Для удобства ноль обрабатывается отдельно - это позволяет не мудохаться с границами массивов во внутренних функциях.
  71.     if (value == 0) {return 'zero'}
  72.     return result + getName(value);
  73. }
  74.  
  75. const input = prompt("Input value: ");
  76. console.log(toReadable(input));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement