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, $word1, $word2, $word5) {
  8. $lastDigits = $number % 100;
  9. if(($lastDigits - $lastDigits%10)/10 == 1) return $word5;
  10. if($lastDigits%10 == 1) return $word1;
  11. if($lastDigits%10 >= 2 && $lastDigits%10 <= 4) return $word2;
  12. return $word5;
  13. }
  14.  
  15. /*
  16.   Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю,
  17.   если мы считаем число для мужского рода (один рубль),
  18.   и 1 — для женского (одна тысяча)
  19. */
  20. function smallNumberToText($number, $isFemale) {
  21.  
  22. $spelling = array(
  23. 0 => 'ноль', 10 => 'десять', 100 => 'сто',
  24. 1 => 'один', 11 => 'одиннадцать', 20 => 'двадцать', 200 => 'двести',
  25. 2 => 'два', 12 => 'двенадцать', 30 => 'тридцать', 300 => 'триста',
  26. 3 => 'три', 13 => 'тринадцать', 40 => 'сорок', 400 => 'четыреста',
  27. 4 => 'четыре', 14 => 'четырнадцать', 50 => 'пятьдесят', 500 => 'пятьсот',
  28. 5 => 'пять', 15 => 'пятнадцать', 60 => 'шестьдесят', 600 => 'шестьсот',
  29. 6 => 'шесть', 16 => 'шестнадцать', 70 => 'семьдесят', 700 => 'семьсот',
  30. 7 => 'семь', 17 => 'семнадцать', 80 => 'восемьдесят', 800 => 'восемьсот',
  31. 8 => 'восемь', 18 => 'восемнадцать', 90 => 'девяносто', 900 => 'девятьсот',
  32. 9 => 'девять', 19 => 'девятнадцать'
  33. );
  34.  
  35. $femaleSpelling = array(
  36. 1 => 'одна', 2 => 'две'
  37. );
  38. $text;
  39.  
  40. if($number-($number%100) != 0) $text .= $spelling[$number-($number%100)] . " ";
  41. if(($number%100 <=20 && $number%100 >=3) || ($isFemale == 0 && $number%100 <= 20 && $number%100 != 0)) $text .= $spelling[$number%100] . " ";
  42. else if($number%100 <= 20 && $number%100 != 0) $text .= $femaleSpelling[$number%100] . " ";
  43. else {
  44. if(($number%100)-($number%10) != 0) $text .= $spelling[($number%100)-($number%10)] . " ";
  45. if($number%10 != 0 && $isFemale && ($number%10 == 1 || $number%10 == 2)) $text .= $femaleSpelling[$number%10] . " ";
  46. else if($number%10 != 0) $text .= $spelling[$number%10] . " ";
  47. }
  48. return $text;
  49. }
  50.  
  51. function numberToText($number) {
  52. $text;
  53. if($number >= 1000000) $text .= smallNumberToText(($number - $number%1000000)/1000000, 0) . inclineWord(($number - $number%1000000)/1000000, "миллион", "миллиона", "миллионов") . " ";
  54. if($number >= 1000) $text .= smallNumberToText(($number%1000000 - $number%1000)/1000, 1) . inclineWord(( $number%1000000 - $number%1000)/1000, "тысяча", "тысячи", "тысяч") . " ";
  55. if($number % 1000 != 0) $text .= smallNumberToText($number%1000, 0) . inclineWord($number%1000, "рубль", "рубля", "рублей") . " ";
  56. else $text .= "рублей";
  57. return $text;
  58. }
  59.  
  60. /* Вызовем функцию несколько раз */
  61. $amount1 = 1000000;
  62. $text1 = numberToText($amount1);
  63.  
  64. echo "На вашем счету {$text1}\n";
  65.  
  66. $amount2 = 92002000;
  67. $text2 = numberToText($amount2);
  68.  
  69. echo "На вашем счету {$text2}\n";
  70.  
  71. $amount3 = 0;
  72. $text3 = numberToText($amount3);
  73.  
  74. echo "На вашем счету {$text3}\n";
  75.  
  76. $amount4 = 100000001;
  77. $text4 = numberToText($amount4);
  78.  
  79. echo "На вашем счету {$text4}\n";
Success #stdin #stdout #stderr 0.02s 52472KB
stdin
Standard input is empty
stdout
На вашем счету один миллион тысяч рублей
На вашем счету девяносто два миллиона две тысячи рублей
На вашем счету рублей
На вашем счету сто миллионов тысяч один рубль 
stderr
PHP Notice:  Undefined variable: text in /home/jwf5rn/prog.php on line 43
PHP Notice:  Undefined variable: text in /home/jwf5rn/prog.php on line 55
PHP Notice:  Undefined variable: text in /home/jwf5rn/prog.php on line 50
PHP Notice:  Undefined variable: text in /home/jwf5rn/prog.php on line 46
PHP Notice:  Undefined variable: text in /home/jwf5rn/prog.php on line 55
PHP Notice:  Undefined variable: text in /home/jwf5rn/prog.php on line 44
PHP Notice:  Undefined variable: text in /home/jwf5rn/prog.php on line 58
PHP Notice:  Undefined variable: text in /home/jwf5rn/prog.php on line 42
PHP Notice:  Undefined variable: text in /home/jwf5rn/prog.php on line 55
PHP Notice:  Undefined variable: text in /home/jwf5rn/prog.php on line 50
PHP Notice:  Undefined variable: text in /home/jwf5rn/prog.php on line 43