fork download
  1. <?php
  2. $Названия_до_20 = [
  3. ['один', 'одна'], ['два', 'две'], 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять',
  4. 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'
  5. ];
  6.  
  7. $Названия_десятков = ['двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'];
  8.  
  9. $Названия_сотен = ['сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'];
  10.  
  11. $Названия_степеней_тысячи = [['тысяча', 'тысячи', 'тысяч', 1], ['миллион', 'миллиона', 'миллионов', 0], ['миллиард', 'миллиарда', 'миллиардов', 0]];
  12.  
  13. function Разобрать_три_разряда($число, $род = 0) {
  14. global $Названия_до_20, $Названия_десятков, $Названия_сотен;
  15. while ($число > 0) {
  16. $разряды[] = $число % 10; $число = intval($число / 10);
  17. }
  18. while (count($разряды) < 3) $разряды[] = 0;
  19. $дес_ед = $разряды[1] * 10 + $разряды[0];
  20. if ($разряды[2] > 0)
  21. $результат[] = $Названия_сотен[$разряды[2] - 1];
  22. if ($дес_ед > 0) {
  23. if ($дес_ед < 20)
  24. $результат[] = ($дес_ед > 2 ?
  25. $Названия_до_20[$дес_ед - 1] :
  26. $Названия_до_20[$дес_ед - 1][$род]
  27. );
  28. else {
  29. $результат[] = $Названия_десятков[$разряды[1] - 2];
  30. $результат[] = ($разряды[0] > 2 ?
  31. $Названия_до_20[$разряды[0] - 1] :
  32. $Названия_до_20[$разряды[0] - 1][$род]
  33. );
  34. }
  35. }
  36. return implode(' ', $результат);
  37. }
  38.  
  39. function Склонение_после_числительного(, ) {
  40. return
  41. ( % 100 >= 5 && % 100 <= 20) ?
  42. [2] :
  43. (( % 10 == 1) ?
  44. [0] :
  45. (( % 10 >= 2 && % 10 <= 4) ?
  46. [1] :
  47. [2]
  48. )
  49. );
  50. }
  51.  
  52. function Число_текстом($число) {
  53. global $Названия_степеней_тысячи;
  54. $сч_степ = 0;
  55. while ($число > 0) {
  56. $три_разряда = $число % 1000;
  57. $результат[] = ($сч_степ > 0 ?
  58. Разобрать_три_разряда($три_разряда, $Названия_степеней_тысячи[$сч_степ - 1][3]) . ' ' .
  59. Склонение_после_числительного($три_разряда, $Названия_степеней_тысячи[$сч_степ - 1]) :
  60. Разобрать_три_разряда($три_разряда)
  61. );
  62. $число = intval($число / 1000);
  63. $сч_степ++;
  64. }
  65. return implode(' ', array_reverse($результат));
  66. }
  67.  
  68. $сл_ч = mt_rand(1, 99999999);
  69. echo
  70. 'На вашем счёте ' . Число_текстом($сл_ч) . ' (' . $сл_ч . ') ' .
  71. Склонение_после_числительного($сл_ч, ['рубль', 'рубля', 'рублей']) . '.';
  72. ?>
Success #stdin #stdout 0s 82560KB
stdin
Standard input is empty
stdout
На вашем счёте два миллиона двести сорок две тысячи четыреста тридцать девять (2242439) рублей.