TOA
@TOA
Негр c агрессивным характером.

Как превратить дробное число в слова (числа в слова прописью)?

Добрый день. Мучаюсь уже несколько дней и не могу найти ни в русскоязычном интернете ни на американских форумах - ничего подходящего.
Цель: Превращать числа в текст.
Пример: 5.25 -> Пять целых двадцать пять сотых ; 2.00 -> Два ; 1.10 -> Один целых десять сотых

Находил самую подходящую для меня функцию на jQuery, но превращает она некорректно.
К примеру число 5.00 оно превращает в Пять целых ноль ноль сотых
function numberToWords(number) {
            var digit =  ['ноль', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'];
            var elevenSeries = ['десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'];
            var countingByTens = ['двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'];
            var shortScale = ['', 'тысяча', 'миллион', 'миллиард', 'триллион'];

            number = number.toString();
            number = number.replace(/[\, ]/g, '');
            if (number != parseFloat(number)) return 'not a number';
            var index_num = number.indexOf('.'); // Узнаем номер точки в числе (у нас всегда под номером 2)
            if (index_num == -1) x = number.length; // Правило если, число целое
            if (index_num > 15) return 'too big'; // Правило, если число больше 15 цифр
              var n = number.split(''); // Разбиваем число на новый массив цифрами (Пример: 1,2,.,0,0)
              var str = '';
              var sk = 0;
            for (var i = 0; i < index_num; i++) {
              if ((index_num - i) % 3 == 2) {
                if (n[i] == '1') {
                  str += elevenSeries[Number(n[i + 1])] + '';
                  i++; sk = 1;
                } else if (n[i] != 0) {
                  str += countingByTens[n[i] - 2] + '';
                  sk = 1;
                }
              }
            else if (n[i] != 0) {
              str += digit[n[i]] + '';
                if ((index_num - i) % 3 == 0) str += 'hundred ';
                sk = 1; }
                if ((index_num - i) % 3 == 1) {
                  if (sk)
                  str += shortScale[(index_num - i - 1) / 3] + ' ';
                  sk = 0;
              } } if (index_num != number.length) { var y = number.length;
                str += 'целых ';
                for (var i = index_num + 1; i < y; i++) str += digit[n[i]] + ' ';
              } str = str.replace(/\number+/g, ' ');

              return str.trim() + " сотых";

        }


Очень прошу, друзья помочь в решении задачи. Задача кажется не слишком сложной, но она оказалась достаточной, чтобы мне запутаться.
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 1
@jenya92
Как вариант, если дробная часть числа равняется нулю - его можно отбрасывать и выводить уже не как 5.00, а как 5
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы