0

I am having issues with spaces. Also, dashes are needed in between numbers such as fifty-four; however, I am getting dashes behind numbers like fifty- thousand.

Also, I require no blank spaces after the output, but I keep having issues outputting with spaces.

Any ideas?

PS: I have studied Convert digits into words with JavaScript - I would like my version to work.

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));
Community
  • 1
  • 1
O'jan G
  • 11
  • 6

2 Answers2

0

Can you please try bellow.

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.

Community
  • 1
  • 1
Mitul
  • 3,431
  • 2
  • 22
  • 35
  • I can see `ninety-nine million ninety-nine hundred ninety-nine thousand nine hundred and ninety-nine only` in console. – Mitul Oct 07 '16 at 06:05
0

Solved

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;
O'jan G
  • 11
  • 6