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. 0 => 'ноль', 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. $first = 0;
  46. $second = 0;
  47. $third = 0;
  48. $res = "";
  49. if($isFemale == 1){
  50. $first = floor($number / 100)*100;
  51. $second = floor(($number - $first)/10)*10;
  52. $third = $number % 10;
  53. if($second < 10){
  54. return $spelling[$first]." ".$femaleSpelling[$third];
  55. }
  56. else{
  57. return $spelling[$first]." ".$spelling[$second]." ".$femaleSpelling[$third];
  58. }}
  59. elseif ($number == 0){
  60. return $spelling[$number];
  61. }
  62. elseif($number % 100 == 0){
  63. return $spelling[$number];
  64. }
  65. elseif(($number >= 11)&&($number <= 19)){
  66. return $spelling[$number];
  67. }
  68. elseif($number >= 20 && $number <= 99){
  69. $first = floor($number/10)*10;
  70. $second = $number - $first;
  71. $res = $spelling[$first]." ".$spelling[$second];
  72. return $res;
  73. }
  74. else{
  75. $first = floor($number / 100)*100;
  76. $third = $number - ($first + $second);
  77. if((($number - $first)>=11) && (($number-$first))<=19){
  78. $second = $number - $first;
  79. $res = $spelling[$first]." ".$spelling[$second];
  80. }
  81. else{
  82. $second = floor(($number - $first)/10)*10;
  83. $third = $number - ($first + $second);
  84. if(($first != 0)&&($second != 0)&&($third != 0)){
  85. $res = $spelling[$first]." ".$spelling[$second]." ".$spelling[$third];
  86. }
  87. elseif($second == 0){
  88. $res = $spelling[$first]." ".$spelling[$third];
  89. }
  90. elseif($third == 0){
  91. $res = $spelling[$first]." ".$spelling[$second];
  92. }
  93. }
  94.  
  95. return $res;
  96.  
  97. }
  98. }
  99. function Thousand($number){
  100.  
  101. $result = "";
  102. $ending = "";
  103. $fem = 0;
  104.  
  105. 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))){
  106. $ending = "ч";
  107. }
  108. elseif(floor($number / 1000)%10 == 1 && (floor($number / 1000) % 100)!= 11){
  109. $ending = "ча";
  110. $fem = 1;
  111. }
  112. elseif((floor($number / 1000)%10 == 2) && (floor($number / 1000) % 100) != 12){
  113. $ending = "чи";
  114. $fem = 1;
  115. }
  116. elseif((floor($number / 1000)%10 >= 2 && (floor($number / 1000)%10 <= 4))){
  117. $ending = "чи";
  118. }
  119. $result = smallNumberToText(floor($number/1000), $fem)." тыся$ending ".smallNumberToText($number - (floor($number/1000)*1000));
  120. return $result;
  121. }
  122. function Million($number){
  123. $ending = "";
  124. 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)))){
  125. $ending = "ов";
  126. }
  127. elseif(floor($number / 1000000)%10 == 1){
  128. $ending = "";
  129. }
  130. elseif(floor($number / 1000000)%10 >= 2 && floor($number / 1000000)%10 <= 4){
  131. $ending = "а";
  132. }
  133. return smallNumberToText(floor($number / 1000000))." миллион$ending ".Thousand($number - (floor($number / 1000000)*1000000));
  134. }
  135. function numberToText($number) {
  136.  
  137. if($number <= 999){
  138. $result = smallNumberToText($number);
  139. }
  140. elseif(($number >= 1000)&&($number <= 999999)){
  141. $result = Thousand($number);
  142. }
  143. elseif($number >= 1000000 && $number <= 99999999){
  144. $result = Million($number);
  145. }
  146. return $result.inclineWord($number);
  147. }
  148.  
  149.  
  150. /* Вызовем функцию несколько раз */
  151. $amount1 = 21412;
  152. $text1 = numberToText($amount1);
  153.  
  154. echo "На вашем счету {$text1}\n";
  155.  
  156. $amount2 = mt_rand(1,9999999);
  157. $text2 = numberToText($amount2);
  158.  
  159. echo "На вашем счету {$text2}\n";
  160.  
  161. $amount3 = mt_rand(1,99999999);
  162. $text3 = numberToText($amount3);
  163.  
  164. echo "На вашем счету {$text3}\n";
  165.  
  166. $amount4 = mt_rand(1,99999999);
  167. $text4 = numberToText($amount4);
  168.  
  169. echo "На вашем счету {$text4}\n";
  170.  
  171.  
Success #stdin #stdout #stderr 0.02s 24448KB
stdin
Standard input is empty
stdout
На вашем счету ноль двадцать одна тысяча четыреста двенадцать (21412) рублей
На вашем счету триста пятьдесят три тысячи семьдесят восемь (353078) рублей
На вашем счету семьдесят шесть миллионов двести сорок шесть тысяч пятьсот семьдесят пять (76246575) рублей
На вашем счету шестьдесят девять миллионов восемьсот тридцать семь тысяч триста шестьдесят девять (69837369) рублей
stderr
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/jZb0l7/prog.php on line 121 and defined in /home/jZb0l7/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/jZb0l7/prog.php on line 51
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/jZb0l7/prog.php on line 121 and defined in /home/jZb0l7/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/jZb0l7/prog.php on line 51
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/jZb0l7/prog.php on line 135 and defined in /home/jZb0l7/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/jZb0l7/prog.php on line 51
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/jZb0l7/prog.php on line 121 and defined in /home/jZb0l7/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/jZb0l7/prog.php on line 51
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/jZb0l7/prog.php on line 135 and defined in /home/jZb0l7/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/jZb0l7/prog.php on line 51
PHP Warning:  Missing argument 2 for smallNumberToText(), called in /home/jZb0l7/prog.php on line 121 and defined in /home/jZb0l7/prog.php on line 29
PHP Notice:  Undefined variable: isFemale in /home/jZb0l7/prog.php on line 51