Advertisement
Guest User

Untitled

a guest
Aug 25th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.14 KB | None | 0 0
  1. <?php
  2.  
  3. function convert_number_to_latvian_words($num)
  4. {
  5. if ( ! is_numeric($num))
  6. return false;
  7.  
  8. if (($num >= 0 && (int) $num < 0) OR (int) $num < 0 - PHP_INT_MAX) {
  9. // overflow
  10. trigger_error('convert_number_to_latvian_words only accepts numbers between -' . PHP_INT_MAX . ' and ' . PHP_INT_MAX, E_USER_WARNING);
  11. return false;
  12. }
  13.  
  14. $dict = [
  15. 0 => 'nulle',
  16. 1 => 'viens',
  17. 2 => 'divi',
  18. 3 => 'trīs',
  19. 4 => 'četri',
  20. 5 => 'pieci',
  21. 6 => 'seši',
  22. 7 => 'septiņi',
  23. 8 => 'astoņi',
  24. 9 => 'deviņi',
  25. 10 => 'desmit',
  26. 11 => 'vienpadsmit',
  27. 12 => 'divpadsmit',
  28. 13 => 'trīspadsmit',
  29. 14 => 'četrpadsmit',
  30. 15 => 'piecpadsmit',
  31. 16 => 'sešpadsmit',
  32. 17 => 'septiņpadsmit',
  33. 18 => 'astoņpadsmit',
  34. 19 => 'deviņpadsmit',
  35. 20 => 'divdesmit',
  36. 30 => 'trīsdesmit',
  37. 40 => 'četrdesmit',
  38. 50 => 'piecdesmit',
  39. 60 => 'sešdesmit',
  40. 70 => 'septiņdesmit',
  41. 80 => 'astoņdesmit',
  42. 90 => 'deviņdesmit',
  43. 100 => 'simts',
  44. 1000 => 'tūkstotis',
  45. 1000000 => 'miljons',
  46. 1000000000 => 'miljards',
  47. ];
  48.  
  49. $pre = [
  50. 1 => 'vien',
  51. 2 => 'div',
  52. 3 => 'trīs',
  53. 4 => 'četr',
  54. 5 => 'piec',
  55. 6 => 'seš',
  56. 7 => 'septiņ',
  57. 8 => 'astoņ',
  58. 9 => 'deviņ',
  59. ];
  60.  
  61. if ($num < 0) {
  62. return 'mīnus '.convert_number_to_latvian_words(abs($num));
  63. }
  64.  
  65. switch ($num) {
  66. case 0:
  67. case 100:
  68. case 1000:
  69. case 1000000:
  70. case 1000000000:
  71. return $dict[$num];
  72. }
  73.  
  74. if ($num < 21) {
  75. return $dict[$num];
  76. }
  77.  
  78. if ($num < 100) {
  79. $x10 = ((int) ($num / 10)) * 10;
  80. $rem = $num % 10;
  81.  
  82. $str = $dict[$x10];
  83.  
  84. if ($rem > 0) {
  85. $str .= ' '.$dict[$rem];
  86. }
  87.  
  88. return $str;
  89. }
  90.  
  91. if ($num < 1000) {
  92. $x100 = intval($num / 100);
  93. $rem = $num % 100;
  94.  
  95. $str = ($x100 === 1 ? 'simtu' : $pre[$x100].'simt');
  96.  
  97. if ($rem > 0) {
  98. $str .= ' '.convert_number_to_latvian_words($rem);
  99. }
  100.  
  101. return $str;
  102. }
  103.  
  104. if ($num < 1000000) {
  105. $val = intval($num / 1000);
  106. $rem = $num % 1000;
  107.  
  108. $str = convert_number_to_latvian_words($val);
  109. $str .= ($val === 1 ? ' tūkstotis' : ' tūkstoši');
  110.  
  111. if ($rem > 0) {
  112. $str .= ' '.convert_number_to_latvian_words($rem);
  113. }
  114.  
  115. return $str;
  116. }
  117.  
  118. throw new Exception('Maximum number that can be converted to words exceeded');
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement