fork(1) 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) рубль
На вашем счету пять миллионов четыреста девяносто одна тысяча восемьсот двадцать три (5491823) рубля
На вашем счету двадцать девять миллионов четыреста пятьдесят одна тысяча сто двадцать девять (29451129) рублей
На вашем счету четыре миллиона двести десять тысяч восемьсот семьдесят семь (4210877) рублей
stderr
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/Oueapy/prog.php on line 107 and defined in /home/Oueapy/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/Oueapy/prog.php on line 48
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/Oueapy/prog.php on line 124 and defined in /home/Oueapy/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/Oueapy/prog.php on line 48
PHP Notice:  Undefined variable: second in /home/Oueapy/prog.php on line 79
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/Oueapy/prog.php on line 124 and defined in /home/Oueapy/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/Oueapy/prog.php on line 48
PHP Notice:  Undefined variable: second in /home/Oueapy/prog.php on line 79
PHP Notice:  Undefined variable: fem in /home/Oueapy/prog.php on line 124
PHP Notice:  Undefined variable: second in /home/Oueapy/prog.php on line 79
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/Oueapy/prog.php on line 124 and defined in /home/Oueapy/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/Oueapy/prog.php on line 48
PHP Notice:  Undefined variable: second in /home/Oueapy/prog.php on line 79