1
0

numberSpelling.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. export function convertNumberToWordsEN(value: number): string {
  2. value = Math.floor(value)
  3. const ones = [
  4. '',
  5. 'one',
  6. 'two',
  7. 'three',
  8. 'four',
  9. 'five',
  10. 'six',
  11. 'seven',
  12. 'eight',
  13. 'nine',
  14. 'ten',
  15. 'eleven',
  16. 'twelve',
  17. 'thirteen',
  18. 'fourteen',
  19. 'fifteen',
  20. 'sixteen',
  21. 'seventeen',
  22. 'eighteen',
  23. 'nineteen'
  24. ];
  25. const tens = [
  26. '',
  27. '',
  28. 'twenty',
  29. 'thirty',
  30. 'forty',
  31. 'fifty',
  32. 'sixty',
  33. 'seventy',
  34. 'eighty',
  35. 'ninety'
  36. ];
  37. let numString = value.toString();
  38. let negative = '';
  39. if (value < 0) {
  40. negative = 'negative ';
  41. value = Math.abs(value);
  42. numString = value.toString();
  43. }
  44. if (value === 0) {
  45. return 'zero';
  46. }
  47. //the case of 1 - 20
  48. if (value < 20) {
  49. return negative + ones[value];
  50. }
  51. if (numString.length === 2) {
  52. return (
  53. negative +
  54. tens[Number(numString[0])] + ' ' +
  55. ones[Number(numString[1])]
  56. );
  57. }
  58. //100 and more
  59. if (numString.length == 3) {
  60. if (numString[1] === '0' && numString[2] === '0') {
  61. return (
  62. negative +
  63. ones[Number(numString[0])] + ' hundred'
  64. );
  65. } else {
  66. return (
  67. negative +
  68. ones[Number(numString[0])] +
  69. ' hundred and ' +
  70. convertNumberToWordsEN(+(numString[1] + numString[2]))
  71. );
  72. }
  73. }
  74. if (numString.length === 4) {
  75. let end = +(numString[1] + numString[2] + numString[3])
  76. if (end === 0) {
  77. return (
  78. negative +
  79. ones[Number(numString[0])] + ' thousand'
  80. );
  81. }
  82. if (end < 100) {
  83. return (
  84. negative +
  85. ones[Number(numString[0])] +
  86. ' thousand and ' +
  87. convertNumberToWordsEN(end)
  88. );
  89. }
  90. return (
  91. negative +
  92. ones[Number(numString[0])] + ' thousand ' +
  93. convertNumberToWordsEN(end)
  94. );
  95. }
  96. return '';
  97. }