fork download
  1. <?php
  2.  
  3. // Staring straight up into the sky ... oh my my
  4.  
  5.  
  6. /* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
  7. function inclineWord($number) {
  8. $last2Digits = $number % 100;
  9. $lastDigit = $number % 10;
  10. $word1 = " ($number) рубль";
  11. $word2 = " ($number) рубля";
  12. $word5 = " ($number) рублей";
  13. if($last2Digits >= 10 && $last2Digits <= 19){
  14. return $word5;
  15. }
  16. elseif($lastDigit >= 5 && $lastDigit <= 9){
  17. return $word5;
  18. }
  19. elseif($lastDigit == 1){
  20. return $word1;
  21. }
  22. elseif($lastDigit >= 2 && $lastDigit <= 4){
  23. return $word2;
  24. }
  25. }
  26.  
  27. function smallNumberToText($number, $isFemale) {
  28.  
  29. $spelling = array(
  30. 10 => 'десять', 100 => 'сто',
  31. 1 => 'один', 11 => 'одиннадцать', 20 => 'двадцать', 200 => 'двести',
  32. 2 => 'два', 12 => 'двенадцать', 30 => 'тридцать', 300 => 'триста',
  33. 3 => 'три', 13 => 'тринадцать', 40 => 'сорок', 400 => 'четыреста',
  34. 4 => 'четыре', 14 => 'четырнадцать', 50 => 'пятьдесят', 500 => 'пятьсот',
  35. 5 => 'пять', 15 => 'пятнадцать', 60 => 'шестьдесят', 600 => 'шестьсот',
  36. 6 => 'шесть', 16 => 'шестнадцать', 70 => 'семьдесят', 700 => 'семьсот',
  37. 7 => 'семь', 17 => 'семнадцать', 80 => 'восемьдесят', 800 => 'восемьсот',
  38. 8 => 'восемь', 18 => 'восемнадцать', 90 => 'девяносто', 900 => 'девятьсот',
  39. 9 => 'девять', 19 => 'девятнадцать'
  40. );
  41.  
  42. $femaleSpelling = array(
  43. 1 => 'одна', 2 => 'две'
  44. );
  45. $res = "";
  46. if($isFemale == 1){
  47. $first = floor($number / 100)*100;
  48. $second = floor(($number - $first)/10)*10;
  49. $third = $number % 10;
  50. if((($second < 11 && $second > 19) || $second == 0) && $first != 0){
  51. return $spelling[$first]." ".$femaleSpelling[$third];
  52. }
  53.  
  54. elseif($first == 0){
  55. return $spelling[$second]." ".$femaleSpelling[$third];
  56. }
  57. elseif($first == 0 && $second == 0){
  58. return $femaleSpelling[$third];
  59. }
  60. else{
  61. return $spelling[$first]." ".$spelling[$second]." ".$femaleSpelling[$third];
  62. }}
  63. elseif($number % 100 == 0){
  64. return $spelling[$number];
  65. }
  66. elseif($number >=1 && $number <= 19){
  67. return $spelling[$number];
  68. }
  69. elseif($number >= 20 && $number <= 99){
  70. $first = floor($number/10)*10;
  71. $second = $number - $first;
  72. $res = $spelling[$first]." ".$spelling[$second];
  73. return $res;
  74. }
  75. else{
  76. $first = floor($number / 100)*100;
  77. $third = $number - ($first + $second);
  78. if((($number - $first)>=11) && (($number-$first))<=19){
  79. $second = $number - $first;
  80. $res = $spelling[$first]." ".$spelling[$second];
  81. }
  82. else{
  83. $second = floor(($number - $first)/10)*10;
  84. $third = $number - ($first + $second);
  85. if(($first != 0)&&($second != 0)&&($third != 0)){
  86. $res = $spelling[$first]." ".$spelling[$second]." ".$spelling[$third];
  87. }
  88. elseif($second == 0){
  89. $res = $spelling[$first]." ".$spelling[$third];
  90. }
  91. elseif($third == 0){
  92. $res = $spelling[$first]." ".$spelling[$second];
  93. }
  94. }
  95.  
  96. return $res;
  97.  
  98. }
  99. }
  100. function Thousand($number){
  101.  
  102. $result = "";
  103. $ending = "";
  104. if($number < 1000){
  105. return smallNumberToText($number);
  106. }
  107.  
  108. if((((((floor($number / 1000)%10>= 5) && (floor($number / 1000)%10 <= 9 ))||(floor($number / 1000)%100 >= 10 && floor($number / 1000)%100 <= 19))||(floor($number / 1000) % 10 == 0)))){
  109. $ending = "ч";
  110. }
  111. elseif((floor($number / 1000)%10 == 1) && ((floor($number / 1000) % 100)!= 11)){
  112. $ending = "ча";
  113. $fem = 1;
  114. }
  115. elseif((floor($number / 1000)%10 == 2) && (floor($number / 1000) % 100) != 12){
  116. $ending = "чи";
  117. $fem = 1;
  118. }
  119. elseif((floor($number / 1000)%10 >= 2 && (floor($number / 1000)%10 <= 4))){
  120. $ending = "чи";
  121. }
  122. $result = smallNumberToText(floor($number/1000), $fem)." тыся$ending ".smallNumberToText($number - (floor($number/1000)*1000));
  123. return $result;
  124. }
  125. function Million($number){
  126. $ending = "";
  127. $mill = floor($number / 1000000);
  128. $fem = 0;
  129. if(((((floor($number / 1000000)%10>= 5) && (floor($number / 1000000)%10 <= 9 || floor($number / 1000000)%100 >= 10 && floor($number / 1000000)%100 <= 19)||floor($number / 1000000) % 10 == 0)))){
  130. $ending = "ов";
  131. }
  132. elseif(floor($number / 1000000)%10 == 1){
  133. $ending = "";
  134. }
  135. elseif(floor($number / 1000000)%10 >= 2 && floor($number / 1000000)%10 <= 4){
  136. $ending = "а";
  137. }
  138. return smallNumberToText($mill, $fem)." миллион$ending ".Thousand($number - (floor($number / 1000000)*1000000));
  139. }
  140. function numberToText($number) {
  141. if($number == 0){
  142. $result = "ноль";
  143. }
  144.  
  145. elseif($number <= 999){
  146. $result = smallNumberToText($number);
  147. }
  148. elseif(($number >= 1000)&&($number <= 999999)){
  149. $result = Thousand($number);
  150. }
  151. elseif($number >= 1000000 && $number <= 99999999){
  152. $result = Million($number);
  153. }
  154. return $result.inclineWord($number);
  155. }
  156.  
  157.  
  158. /* Вызовем функцию несколько раз */
  159. $amount1 = 2000001;
  160. $text1 = numberToText($amount1);
  161.  
  162. echo "На вашем счету {$text1}\n";
  163.  
  164. $amount2 = mt_rand(1,9999999);
  165. $text2 = numberToText($amount2);
  166.  
  167. echo "На вашем счету {$text2}\n";
  168.  
  169. $amount3 = mt_rand(1,99999999);
  170. $text3 = numberToText($amount3);
  171.  
  172. echo "На вашем счету {$text3}\n";
  173.  
  174. $amount4 = mt_rand(1,99999999);
  175. $text4 = numberToText($amount4);
  176.  
  177. echo "На вашем счету {$text4}\n";
  178.  
  179.  
Success #stdin #stdout #stderr 0.02s 24400KB
stdin
Standard input is empty
stdout
На вашем счету два миллиона один (2000001) рубль
На вашем счету семь миллионов двести девяносто девять тысяч сто семьдесят пять (7299175) рублей
На вашем счету двадцать два миллиона девятьсот девятнадцать тысяч пятьсот шестьдесят один (22919561) рубль
На вашем счету двадцать два миллиона тридцать восемь тысяч четыреста двадцать
stderr
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/39HQRL/prog.php on line 107 and defined in /home/39HQRL/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/39HQRL/prog.php on line 48
PHP Notice:  Undefined variable: fem in /home/39HQRL/prog.php on line 124
PHP Notice:  Undefined variable: second in /home/39HQRL/prog.php on line 79
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/39HQRL/prog.php on line 124 and defined in /home/39HQRL/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/39HQRL/prog.php on line 48
PHP Notice:  Undefined variable: second in /home/39HQRL/prog.php on line 79
PHP Notice:  Undefined variable: fem in /home/39HQRL/prog.php on line 124
PHP Notice:  Undefined variable: second in /home/39HQRL/prog.php on line 79
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/39HQRL/prog.php on line 124 and defined in /home/39HQRL/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/39HQRL/prog.php on line 48
PHP Notice:  Undefined variable: second in /home/39HQRL/prog.php on line 79
PHP Notice:  Undefined variable: fem in /home/39HQRL/prog.php on line 124
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/39HQRL/prog.php on line 124 and defined in /home/39HQRL/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/39HQRL/prog.php on line 48
PHP Notice:  Undefined variable: second in /home/39HQRL/prog.php on line 79