Gets the name of a number, even if it's stupidly big. Supersedes TheoryOfNekomata/number-name.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

178 lines
2.8 KiB

  1. import { Group } from '../../common';
  2. export const GROUP_SEPARATOR = ' ' as const;
  3. export const DECIMAL_POINT = '.' as const;
  4. export const GROUPING_SYMBOL = ',' as const;
  5. export const NEGATIVE = 'negative' as const;
  6. export const NEGATIVE_SYMBOL = '-' as const;
  7. export const TENS_ONES_SEPARATOR = '-' as const;
  8. export const POSITIVE_SYMBOL = '+' as const;
  9. export const SHORT_MILLIA_DELIMITER = '^' as const;
  10. export const SHORT_MILLIA_ILLION_DELIMITER = '-' as const;
  11. export const EXPONENT_DELIMITER = 'e' as const;
  12. export const EMPTY_GROUP_DIGITS = '000' as const;
  13. export const EMPTY_PLACE: Group = [EMPTY_GROUP_DIGITS, BigInt(0)];
  14. export const T_AFFIX = 't' as const;
  15. /**
  16. * Ones number names.
  17. */
  18. export const ONES = [
  19. 'zero',
  20. 'one',
  21. 'two',
  22. 'three',
  23. 'four',
  24. 'five',
  25. 'six',
  26. 'seven',
  27. 'eight',
  28. 'nine',
  29. ] as const;
  30. export type OnesName = typeof ONES[number];
  31. /**
  32. * Ten plus ones number names.
  33. */
  34. export const TEN_PLUS_ONES = [
  35. 'ten',
  36. 'eleven',
  37. 'twelve',
  38. 'thirteen',
  39. 'fourteen',
  40. 'fifteen',
  41. 'sixteen',
  42. 'seventeen',
  43. 'eighteen',
  44. 'nineteen',
  45. ] as const;
  46. export type TenPlusOnesName = typeof TEN_PLUS_ONES[number];
  47. /**
  48. * Tens number names.
  49. */
  50. export const TENS = [
  51. 'zero',
  52. TEN_PLUS_ONES[0],
  53. 'twenty',
  54. 'thirty',
  55. 'forty',
  56. 'fifty',
  57. 'sixty',
  58. 'seventy',
  59. 'eighty',
  60. 'ninety',
  61. ] as const;
  62. export type TensName = typeof TENS[number];
  63. /**
  64. * Hundreds name.
  65. */
  66. export const HUNDRED = 'hundred' as const;
  67. /**
  68. * Thousands name.
  69. */
  70. export const THOUSAND = 'thousand' as const;
  71. // export const ILLION_ORDINAL_SUFFIX = 'illionth' as const;
  72. // export const THOUSAND_ORDINAL = 'thousandth' as const;
  73. /**
  74. * Special millions name.
  75. */
  76. export const MILLIONS_SPECIAL_PREFIXES = [
  77. '',
  78. 'm',
  79. 'b',
  80. 'tr',
  81. 'quadr',
  82. 'quint',
  83. 'sext',
  84. 'sept',
  85. 'oct',
  86. 'non',
  87. ] as const;
  88. export type MillionsSpecialPrefix = Exclude<typeof MILLIONS_SPECIAL_PREFIXES[number], ''>;
  89. /**
  90. * Millions name.
  91. */
  92. export const MILLIONS_PREFIXES = [
  93. '',
  94. 'un',
  95. 'duo',
  96. 'tre',
  97. 'quattuor',
  98. 'quin',
  99. 'sex',
  100. 'septen',
  101. 'octo',
  102. 'novem',
  103. ] as const;
  104. export type MillionsPrefix = Exclude<typeof MILLIONS_PREFIXES[number], ''>;
  105. /**
  106. * Decillions name.
  107. */
  108. export const DECILLIONS_PREFIXES = [
  109. '',
  110. 'dec',
  111. 'vigin',
  112. 'trigin',
  113. 'quadragin',
  114. 'quinquagin',
  115. 'sexagin',
  116. 'septuagin',
  117. 'octogin',
  118. 'nonagin',
  119. ] as const;
  120. export type DecillionsPrefix = Exclude<typeof DECILLIONS_PREFIXES[number], ''>;
  121. /**
  122. * Centillions name.
  123. */
  124. export const CENTILLIONS_PREFIXES = [
  125. '',
  126. 'cen',
  127. 'duocen',
  128. 'trecen',
  129. 'quadringen',
  130. 'quingen',
  131. 'sescen',
  132. 'septingen',
  133. 'octingen',
  134. 'nongen',
  135. ] as const;
  136. export type CentillionsPrefix = Exclude<typeof CENTILLIONS_PREFIXES[number], ''>;
  137. /**
  138. * Prefix for millia- number names.
  139. */
  140. export const MILLIA_PREFIX = 'millia' as const;
  141. /**
  142. * Suffix for -illion number names.
  143. */
  144. export const ILLION_SUFFIX = 'illion' as const;