将数字输入作为字符串返回 Javascript

Returning Numeric Input as String Javascript

我遇到空格问题。此外,数字之间需要破折号,例如五十四;但是,我在五万等数字后面加了破折号。

此外,我要求输出后没有空格,但我在输出空格时一直遇到问题。

有什么想法吗?

PS:我已经学习了 Convert digits into words with JavaScript - 我希望我的版本可以工作。

function number2words(n) {
  a = ['', 'one ', 'two ', 'three ', 'four ', 'five ', 'six ', 'seven ', 'eight ', 'nine ', 'ten ', 'eleven ', 'twelve ', 'thirteen ', 'fourteen ', 'fifteen ', 'sixteen ', 'seventeen ', 'eighteen ', 'nineteen '];
  b = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];
  c = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];


  if ((n = n.toString()).length > 9) return false;
  num = ('000000000' + n).substr(-9).match(/^(\d{2})(\d{2})(\d{2})(\d{1})(\d{2})$/);
  if (!num)
    return;

  var str = '';
  dash = '-';

  if (c[num[5][1]] == '')
    dash = '';

  if (n <= 19 && n != 0)
    return c[n];
  else if (n == 0)
    return 'zero';
  else if (n == 20 || n == 30 || n == 40 || n == 50 || n == 60 || n == 70 || n == 80 || n == 90)
    return b[n[0]];
  else
    str += (num[1] != 0) ? (a[Number(num[1])] || b[num[1][0]] + '-' + a[num[1][1]]) + 'million ' : '';
  str += (num[2] != 0) ? (a[Number(num[2])] || b[num[2][0]] + '-' + a[num[2][1]]) + 'hundred ' : '';
  str += (num[3] != 0) ? (a[Number(num[3])] || b[num[3][0]] + '-' + a[num[3][1]]) + 'thousand ' : '';
  str += (num[4] != 0) ? (a[Number(num[4])] || b[num[4][0]] + '-' + a[num[4][1]]) + 'hundred' : '';
  str += (num[5] != 0) ? ((str != '') ? ' ' : '') + (a[Number(num[5])] || b[num[5][0]] + dash + a[num[5][1]]) : '';
  console.log(str[str.length - 1], str.length);

  if (str[str.length - 1] == " ") {
    var sl = str.slice(0, str.length - 1);
    return sl;
  }
  return str;
}
console.log(number2words(15007));
console.log(number2words(464097));

你能试试下面的方法吗?

var a = ['','one ','two ','three ','four ', 'five ','six ','seven ','eight ','nine ','ten ','eleven ','twelve ','thirteen ','fourteen ','fifteen ','sixteen ','seventeen ','eighteen ','nineteen '];
var b = ['', '', 'twenty','thirty','forty','fifty', 'sixty','seventy','eighty','ninety'];

function inWords (num) {
    if ((num = num.toString()).length > 9) return 'overflow';
    n = ('000000000' + num).substr(-9).match(/^(\d{2})(\d{2})(\d{2})(\d{1})(\d{2})$/);
    if (!n) return; var str = '';
    str += (n[1] != 0) ? (a[Number(n[1])] || b[n[1][0]] + '-' + a[n[1][1]]) + 'million ' : '';
    str += (n[2] != 0) ? (a[Number(n[2])] || b[n[2][0]] + '-' + a[n[2][1]]) + 'hundred ' : '';
    str += (n[3] != 0) ? (a[Number(n[3])] || b[n[3][0]] + '-' + a[n[3][1]]) + 'thousand ' : '';
    str += (n[4] != 0) ? (a[Number(n[4])] || b[n[4][0]] + '-' + a[n[4][1]]) + 'hundred ' : '';
    str += (n[5] != 0) ? ((str != '') ? 'and ' : '') + (a[Number(n[5])] || b[n[5][0]] + '-' + a[n[5][1]]) + 'only ' : '';
    return str;
}

console.log(inWords(999999999));
console.log(inWords(1095));

Copy Form Convert digits into words with JavaScript Done some changes for your output.

已解决

function number2words(n) {
  a = ['', 'one ', 'two ', 'three ', 'four ', 'five ', 'six ', 'seven ', 'eight ', 'nine ', 'ten ', 'eleven ', 'twelve ', 'thirteen ', 'fourteen ', 'fifteen ', 'sixteen ', 'seventeen ', 'eighteen ', 'nineteen '];
  b = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];
  c = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];


  if ((n = n.toString()).length > 9) return false;
  num = ('000000000' + n).substr(-9).match(/^(\d{2})(\d{2})(\d{2})(\d{1})(\d{2})$/);
  if (!num)
    return;

  var str = '';
  dash = '-';

  if (c[num[5][1]] == '')
    dash = '';

  if (n <= 19 && n != 0)
    return c[n];
  else if (n == 0)
    return 'zero';
  else if (n == 20 || n == 30 || n == 40 || n == 50 || n == 60 || n == 70 || n == 80 || n == 90)
    return b[n[0]];
  else
    str += (num[1] != 0) ? (a[Number(num[1])]  || b[num[1][0]] + '-' + a[num[1][1]]) + 'million ' : '';
    str += (num[2] != 0) ? (a[Number(num[2])]  || b[num[2][0]] + '-' + a[num[2][1]]) + 'hundred ' : '';
    str += (num[3] != 0)  ? (a[Number(num[3])]  || b[num[3][0]] + '-' + a[num[3][1]]) + 'thousand ' : '';
    str += (num[4] != 0) ? (a[Number(num[4])]  || b[num[4][0]] + '-' + a[num[4][1]]) + 'hundred' : '';
    str += (num[5] != 0) ? ((str != '') ? ' ' : '') + (a[Number(num[5])] || b[num[5][0]] + dash + a[num[5][1]]) : '';

   str = str.split("  ").join(' ');
   str = str.split("-thousand").join(" thousand");

 if(str[str.length-1] == " "){
   var sl = str.slice(0, str.length-1);
   return sl;
 }

  return str;