Есть ли в Javascript какая-либо функция для преобразования чисел (с десятичными знаками) в слова? - PullRequest
0 голосов
/ 26 февраля 2020

Я хочу преобразовать вычисленную сумму в слова.

Для 2–3 десятичных знаков, поскольку сумма указана в долларах США (например, 230,54), а также в оманских риалах (например, 230,542). Я попробовал одну функцию, упомянутую в Stackoverflow, но она не go для 3 десятичных знаков .ie Преобразование цифр в слова с JavaScript, но функции либо не работают для десятичных знаков, либо не содержат 3 десятичных знака.

Например, если число 235,45, слова должны быть TWO HUNDRED THIRTY FIVE AND 45 CENTS или TWO HUNDRED THIRTY FIVE AND 45/100 DOLLARS То же самое для риалов Омари: Если сумма 235,456, чем TWO HUNDRED THIRTY FIVE AND 456 FILS или TWO HUNDRED THIRTY FIVE AND 450/1000 RIYALS

i пробовал это, но он выводит только цифры до десятичного числа:

function converttoWords(amount) {
    var words = new Array();
    words[0] = '';
    words[1] = 'One';
    words[2] = 'Two';
    words[3] = 'Three';
    words[4] = 'Four';
    words[5] = 'Five';
    words[6] = 'Six';
    words[7] = 'Seven';
    words[8] = 'Eight';
    words[9] = 'Nine';
    words[10] = 'Ten';
    words[11] = 'Eleven';
    words[12] = 'Twelve';
    words[13] = 'Thirteen';
    words[14] = 'Fourteen';
    words[15] = 'Fifteen';
    words[16] = 'Sixteen';
    words[17] = 'Seventeen';
    words[18] = 'Eighteen';
    words[19] = 'Nineteen';
    words[20] = 'Twenty';
    words[30] = 'Thirty';
    words[40] = 'Forty';
    words[50] = 'Fifty';
    words[60] = 'Sixty';
    words[70] = 'Seventy';
    words[80] = 'Eighty';
    words[90] = 'Ninety';
    amount = amount.toString();
    var atemp = amount.split(".");
    var number = atemp[0].split(",").join("");
    var n_length = number.length;
    var words_string = "";
    if (n_length <= 9) {
      var n_array = new Array(0, 0, 0, 0, 0, 0, 0, 0, 0);
      var received_n_array = new Array();
      for (var i = 0; i < n_length; i++) {
        received_n_array[i] = number.substr(i, 1);
      }
      for (var i = 9 - n_length, j = 0; i < 9; i++ , j++) {
        n_array[i] = received_n_array[j];
      }
      for (var i = 0, j = 1; i < 9; i++ , j++) {
        if (i == 0 || i == 2 || i == 4 || i == 7) {
          if (n_array[i] == 1) {
            n_array[j] = 10 + parseInt(n_array[j]);
            n_array[i] = 0;
          }
        }
      }
      value = "";
      for (var i = 0; i < 9; i++) {
        if (i == 0 || i == 2 || i == 4 || i == 7) {
          value = n_array[i] * 10;
        } else {
          value = n_array[i];
        }
        if (value != 0) {
          words_string += words[value] + " ";
        }
        if ((i == 1 && value != 0) || (i == 0 && value != 0 && n_array[i + 1] == 0)) {
          words_string += "Crores ";
        }
        if ((i == 3 && value != 0) || (i == 2 && value != 0 && n_array[i + 1] == 0)) {
          words_string += "Lakhs ";
        }
        if ((i == 5 && value != 0) || (i == 4 && value != 0 && n_array[i + 1] == 0)) {
          words_string += "Thousand ";
        }
        if (i == 6 && value != 0 && (n_array[i + 1] != 0 && n_array[i + 2] != 0)) {
          //words_string += "Hundred and ";
          words_string += "Hundred ";
        } else if (i == 6 && value != 0) {
          words_string += "Hundred ";
        }
      }
      words_string = words_string.split("  ").join(" ");
    }
    return words_string;
}

Может кто-нибудь, пожалуйста, помогите мне в этом?

1 Ответ

0 голосов
/ 27 февраля 2020

Посмотрите на модуль N/format/i18n. Локаль может быть установлена ​​в соответствии с кодом ISO 639-2.

Попробуйте это в консоли браузера;

var i18n;   
require(['N/format/i18n'],
  function(i8) {
    i18n = i8;
  });               
i18n.spellOut({number: 145.32, locale:'eng'});
...