numbers_en.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.NUMBERS = void 0;
  4. const messages_js_1 = require("../messages.js");
  5. function hundredsToWords_(num) {
  6. let n = num % 1000;
  7. let str = '';
  8. str += exports.NUMBERS.ones[Math.floor(n / 100)]
  9. ? exports.NUMBERS.ones[Math.floor(n / 100)] + exports.NUMBERS.numSep + 'hundred'
  10. : '';
  11. n = n % 100;
  12. if (n) {
  13. str += str ? exports.NUMBERS.numSep : '';
  14. str +=
  15. exports.NUMBERS.ones[n] ||
  16. exports.NUMBERS.tens[Math.floor(n / 10)] +
  17. (n % 10 ? exports.NUMBERS.numSep + exports.NUMBERS.ones[n % 10] : '');
  18. }
  19. return str;
  20. }
  21. function numberToWords(num) {
  22. if (num === 0) {
  23. return exports.NUMBERS.zero;
  24. }
  25. if (num >= Math.pow(10, 36)) {
  26. return num.toString();
  27. }
  28. let pos = 0;
  29. let str = '';
  30. while (num > 0) {
  31. const hundreds = num % 1000;
  32. if (hundreds) {
  33. str =
  34. hundredsToWords_(num % 1000) +
  35. (pos ? '-' + exports.NUMBERS.large[pos] + '-' : '') +
  36. str;
  37. }
  38. num = Math.floor(num / 1000);
  39. pos++;
  40. }
  41. return str.replace(/-$/, '');
  42. }
  43. function numberToOrdinal(num, plural) {
  44. if (num === 1) {
  45. return plural ? 'oneths' : 'oneth';
  46. }
  47. if (num === 2) {
  48. return plural ? 'halves' : 'half';
  49. }
  50. const ordinal = wordOrdinal(num);
  51. return plural ? ordinal + 's' : ordinal;
  52. }
  53. function wordOrdinal(num) {
  54. let ordinal = numberToWords(num);
  55. if (ordinal.match(/one$/)) {
  56. ordinal = ordinal.slice(0, -3) + 'first';
  57. }
  58. else if (ordinal.match(/two$/)) {
  59. ordinal = ordinal.slice(0, -3) + 'second';
  60. }
  61. else if (ordinal.match(/three$/)) {
  62. ordinal = ordinal.slice(0, -5) + 'third';
  63. }
  64. else if (ordinal.match(/five$/)) {
  65. ordinal = ordinal.slice(0, -4) + 'fifth';
  66. }
  67. else if (ordinal.match(/eight$/)) {
  68. ordinal = ordinal.slice(0, -5) + 'eighth';
  69. }
  70. else if (ordinal.match(/nine$/)) {
  71. ordinal = ordinal.slice(0, -4) + 'ninth';
  72. }
  73. else if (ordinal.match(/twelve$/)) {
  74. ordinal = ordinal.slice(0, -6) + 'twelfth';
  75. }
  76. else if (ordinal.match(/ty$/)) {
  77. ordinal = ordinal.slice(0, -2) + 'tieth';
  78. }
  79. else {
  80. ordinal = ordinal + 'th';
  81. }
  82. return ordinal;
  83. }
  84. function numericOrdinal(num) {
  85. const tens = num % 100;
  86. const numStr = num.toString();
  87. if (tens > 10 && tens < 20) {
  88. return numStr + 'th';
  89. }
  90. switch (num % 10) {
  91. case 1:
  92. return numStr + 'st';
  93. case 2:
  94. return numStr + 'nd';
  95. case 3:
  96. return numStr + 'rd';
  97. default:
  98. return numStr + 'th';
  99. }
  100. }
  101. exports.NUMBERS = (0, messages_js_1.NUMBERS)({
  102. wordOrdinal: wordOrdinal,
  103. numericOrdinal: numericOrdinal,
  104. numberToWords: numberToWords,
  105. numberToOrdinal: numberToOrdinal
  106. });