<?php
setlocale
(LC_ALL'ru_RU''ru_RU.cp1251');
header("Content-Type: text/html; charset=windows-1251");

class 
Num2rub {
    public 
$def = array (
        
'form' => array('1' => 0'2' => 1'1f' => 0'2f' => 1'3' => 1'4' => 1),
        
'rank' => array(
            
=> array('рубль''рубля''рублей''f' => ''),
            
=> array('тысяча''тысячи''тысяч''f' => 'f'),
            
=> array('миллион''миллиона''миллионов''f' => ''),
            
=> array('миллиард''миллиарда''миллиардов''f' => ''),
            
'k' => array('копейка''копейки''копеек''f' => 'f')
        ),
    
        
'words' => array(
            
'0' => array( '''десять'''''),
            
'1' => array( 'один''одиннадцать''''сто'),
            
'2' => array( 'два''двенадцать''двадцать''двести'),
            
'1f' => array( 'одна'''''''),
            
'2f' => array( 'две'''''''),
            
'3' => array( 'три''тринадцать''тридцать''триста'),
            
'4' => array( 'четыре''четырнадцать''сорок''четыреста'),
            
'5' => array( 'пять''пятнадцать''пятьдесят''пятьсот'),
            
'6' => array( 'шесть''шестнадцать''шестьдесят''шестьсот'),
            
'7' => array( 'семь''семнадцать''семьдесят''семьсот'),
            
'8' => array( 'восемь''восемнадцать''восемьдесят''восемьсот'),
            
'9' => array( 'девять''девятнадцать''девяносто''девятьсот')
        )
    );
        
    public static function 
doit($str) {
        
$num2rub = new Num2rub();
        
        
$str number_format($str2'.'',');
        
$rubkop explode('.'$str);
        
$rub $rubkop[0];
        
$kop = (isset($rubkop[1])) ? $rubkop[1] : '00';
        
$rub = (strlen($rub) == 1) ? '0' $rub $rub;
        
$rub explode(','$rub);
        
$rub array_reverse($rub);
        
        
$word = array();
        
$word[] = $num2rub->dvig($kop'k'false);
        foreach(
$rub as $key => $value) {
            if (
intval($value) > || $key == 0//подсказал skrabus (http://forum.dklab.ru/profile.php?mode=viewprofile&u=22791)
                
$word[] = $num2rub->dvig($value$key);
        }
        
        
$word array_reverse($word);
        return 
ucfirst(trim(implode(' '$word)));
    }
    
    public function 
dvig($str$key$do_word true) {
        
//$key - разряды
        
$def =& $this->def;
        
$words $def['words'];
        
$form $def['form'];

        if (!isset(
$def['rank'][$key])) return '!razriad';
        
$rank $def['rank'][$key];
        
$sotni '';
        
$word '';
        
$num_word '';
        
        
$str = (strlen($str) == 1) ? '0' $str $str;
        
$dig str_split($str);
        
$dig array_reverse($dig);
        
        if (
== $dig[1]) {
            
$num_word = ($do_word) ? $words[$dig[0]][1] : $dig[1] . $dig[0];
            
$word $rank[2];
        }
        else {
            
//$rank[3] - famale
            
if ($dig[0] != && $dig[0] != 2$rank['f'] = '';
            
$num_word = ($do_word
                ? 
$words[$dig[1]][2] . ' ' $words[$dig[0] . $rank['f']][0]
                : 
$dig[1] . $dig[0];
            
$key = (isset($form[$dig[0]])) ? $form[$dig[0]] : false;
            
$word = ($key !== false) ? $rank[$key] : $rank[2];
        }
        
        
$sotni = (isset($dig[2])) ? (($do_word) ? $words[$dig[2]][3] : $dig[2]) : '';
        if (
$sotni && $do_word$sotni .= ' ';
        
        return 
$sotni $num_word ' ' $word;
    } 
//function dvig
    
//class Num2rub() 

//Отображение исходного кода

if (isset($_GET['code'])) {
      echo 
'<title>Исходный код файла "' $_SERVER['REQUEST_URI'] . '"</title>';
      
highlight_file(__FILE__);
      exit;
}

//Пример использования:

$number = isset($_GET['number']) ? floatval($_GET['number']) : 34101119.22;
$numbervis htmlspecialchars($numberENT_QUOTES);

if (
$number) echo "<center><p>" Num2rub::doit($number) . "</p></center>";

echo 
"
<center><form action='' method='get'>Введите число: <input name='number' value='
$numbervis'> <input type='submit' value='Написать прописью'></form>
<p><a href='?code'>Исходный php-код файла</a>
"
;