Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сумма прописью. В продолжении темы "Загадка на PHP"
 
 автор: tAleks   (26.08.2008 в 15:48)   письмо автору
 
 

В инете, нашел вот этот скрпит, которые рисует сумму прописью:


<?
$_1_2
[1]="одна ";
$_1_2[2]="две ";

$_1_19[1]="один ";
$_1_19[2]="два ";
$_1_19[3]="три ";
$_1_19[4]="четыре ";
$_1_19[5]="пять ";
$_1_19[6]="шесть ";
$_1_19[7]="семь ";
$_1_19[8]="восемь ";
$_1_19[9]="девять ";
$_1_19[10]="десять ";
$_1_19[11]="одиннацать ";
$_1_19[12]="двенадцать ";
$_1_19[13]="тринадцать ";
$_1_19[14]="четырнадцать ";
$_1_19[15]="пятнадцать ";
$_1_19[16]="шестнадцать ";
$_1_19[17]="семнадцать ";
$_1_19[18]="восемнадцать ";
$_1_19[19]="девятнадцать ";

$des[2]="двадцать ";
$des[3]="тридцать ";
$des[4]="сорок ";
$des[5]="пятьдесят ";
$des[6]="шестьдесят ";
$des[7]="семьдесят ";
$des[8]="восемдесят ";
$des[9]="девяносто ";

$hang[1]="сто ";
$hang[2]="двести ";
$hang[3]="триста ";
$hang[4]="четыреста ";
$hang[5]="пятьсот ";
$hang[6]="шестьсот ";
$hang[7]="семьсот ";
$hang[8]="восемьсот ";
$hang[9]="девятьсот ";

$namerub[1]="рубль ";
$namerub[2]="рубля ";
$namerub[3]="рублей ";

$nametho[1]="тысяча ";
$nametho[2]="тысячи ";
$nametho[3]="тысяч ";

$namemil[1]="миллион ";
$namemil[2]="миллиона ";
$namemil[3]="миллионов ";

$namemrd[1]="миллиард ";
$namemrd[2]="миллиарда ";
$namemrd[3]="миллиардов ";

$kopeek[1]="копейка ";
$kopeek[2]="копейки ";
$kopeek[3]="копеек ";


function 
semantic($i,&$words,&$many,$f)
{
    global 
$_1_2$_1_19$des$hang$namerub$nametho$namemil$namemrd;
    
    
// в words будем пихать запись числа
    
$words="";
    
$fl=0;
    
    
//рассматриваем промежуток чисел от 100 до 999
    
if($i >= 100)
    {
        
//сколько сотен
        
$jkl intval($i 100);
        
$words.=$hang[$jkl];
        
//отбрасываем "сотенный разряд" и считаем остальные разряды
        
$i%=100;
    }
    
    
//рассматриваем промежуток чисел от 20 до 10 (от 20, потому что есть
    //всякие одиннадцать, двенадцать...)
    
if($i >= 20)
    {
        
$jkl intval($i 10);
        
$words.=$des[$jkl];
        
//отбрасываем рязряд десятков и остаемся с маленьким числом от 1 до 9
        
$i%=10;
        
$fl=1;
    }

    
//в $fem - индекс массива с записью чисел
    
switch($i)
    {
        case 
1$many=1; break;
        case 
2:
        case 
3:
        case 
4$many=2; break;
        default: 
$many=3; break;
    }

    
//если тысяча, то одна или две, а если нет, то один или два...
    
if($i)
    {
        if(
$i && $f == 1$words.=$_1_2[$i];
        else 
$words.=$_1_19[$i];
    }
}

function 
num2str($L)
{
    global 
$_1_2$_1_19$des$hang$namerub$nametho$namemil$namemrd$kopeek;

    
$s=" ";
    
$s1=" ";
    
//считаем количество копеек, т.е. дробной части числа
    
$kop=intval(( $L*100 intval($L)*100 ));
    
//отбрасываем дробную часть
    
$L=intval($L);

    if(
$L>=1000000000)
    {
        
$many=0;
        
semantic(intval($L 1000000000),$s1,$many,3);
        
$s.=$s1.$namemrd[$many];
        
$L%=1000000000;
        
//если ровно сколько-то миллиардов, то хватит считать
        
if($L==0)
        {
         
$s.="рублей ";
        }
    }

    if(
$L >= 1000000)
    {
        
$many=0;
        
semantic(intval($L 1000000),$s1,$many,2);
        
$s.=$s1.$namemil[$many];
        
$L%=1000000;
        
//аналогично если ровно сколько-то миллионов, то хватит считать
        
if($L==0)
        {
         
$s.="рублей ";
        }
    }

    if(
$L >= 1000)
    {
        
$many=0;
        
semantic(intval($L 1000),$s1,$many,1);
        
$s.=$s1.$nametho[$many];
        
$L%=1000;
        if(
$L==0)
        {
         
$s.="рублей ";
        }
    }


    if(
$L != 0)
    {
        
$many=0;
        
semantic($L,$s1,$many,0);
        
$s.=$s1.$namerub[$many];
    }

    
//если есть копейки, то добавим их в итоговую строку
    
if($kop 0)
    {
        
$many=0;
        
semantic($kop,$s1,$many,1);
        
$s.=$s1.$kopeek[$many];
    }
    else
    {
        
$s.=" 00 копеек";
    }

    return 
$s;
}

if (!isset(
$per))
{
?>
<FORM ACTION ="<? echo $PHP_SELF?>">
Введите положительное число, меньшее 10<sup>6</sup><br>
<INPUT type="text" name="per"><BR>
<INPUT type="submit" value="Отправить">
</FORM>
<?
}
else echo 
num2str($per);

?>



вот именно он, и пишет что копеек 19, а не 20, когда передаем ему 150.20 руб.

Помогите это исправить.
Буду сильно благодарен.

  Ответить  
 
 автор: tAleks   (26.08.2008 в 16:22)   письмо автору
 
   для: tAleks   (26.08.2008 в 15:48)
 

Нашел ответ здесь: http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=32943

  Ответить  
 
 автор: Trianon   (26.08.2008 в 17:49)   письмо автору
 
   для: tAleks   (26.08.2008 в 16:22)
 

Корректное вычисление рублей копеек в том скрипте обеспечивается следующим нехитрым кодом:
    $L = intval(round($L*100));
    $kop = $L % 100;
    $L = intval(($L - $kop)/100);

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования