The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Перевод числа в пpописной вид (perl)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: perl,  (найти похожие документы)
Date: Tue, 28 Jan 2003 12:42:32 +0500 From: Michael Babakov <M.Babakov@sochi.net.ru> Newsgroups: ftn.ru.perl Subject: Перевод числа в пpописной вид > Hаpод, как на пеpле сделать пеpевод из числа в пpопись, т.е. напpимеp > кидаеш ей 151 - а тебе в ответ "стопятьдесят один" ну и так далее! Мылом выслал, но мне интерсно кто автор этого скрипта. Сколько пользуюсь, а не знаю. Скажите, пожалуйста. === cut === #!/usr/bin/perl -w use integer; my @T = ( "", "тысяч", "миллион", "миллиард", "триллион" ); my @S = ( "", "сто ", "двести ", "триста ", "четыреста ", "пятьсот ", "шестьсот ", "семьсот ", "восемьсот ", "девятьсот " ); my @D = ( "", "", "двадцать ", "тридцать ", "сорок ", "пятьдесят ", "шестьдесят ", "семьдесят ", "восемьдесят ", "девяносто " ); my @E = ( "", "один ", "два ", "три ", "четыре ", "пять ", "шесть ", "семь ", "восемь ", "девять ", "десять ", "одиннадцать ", "двенадцать ", "тринадцать ", "четырнадцать ", "пятнадцать ", "шестнадцать ", "семнадцать ", "восемнадцать ", "девятнадцать " ); my @G = ( "", "одна ", "две " ); my @K = ( "а ", "и ", " ", "а ", "ов " ); sub propis { my $Nai = $_[1]; my $Num = $_[0]; my $rod = $_[2]; my $Otv = ""; my $Div = 1000000000; my ($MyN, $Myk, $Gi, $i); for ($i = 3; $i >= 0; $i--) { if ($i > 0) { $MyN = $Num / $Div; } else { $MyN = ($Num % 1000); } if ($MyN != 0) { $Myk = $MyN / 100; if ($Myk != 0) { $Otv = $Otv . $S[$Myk]; } $Myk = ($MyN % 100) / 10; if ($Myk > 1) { $Otv = $Otv . $D[$Myk]; $Myk = $MyN % 10; } else { $Myk = $MyN % 20; } if ((($i == 1) || ($rod == 1) ) && ($Myk < 3)) { $Otv = $Otv . $G[$Myk]; } else { $Otv = $Otv . $E[$Myk]; } $Otv .= $T[$i]; if ($i > 0) { if ($i == 1) { $Gi = 0; } else { $Gi = 2; } if ( (($Myk % 10) == 1) && ($Myk != 11) ) { # // was == 1 $Otv = $Otv . $K[$Gi]; } elsif ( ($Myk != 0) && (($Myk % 10) < 5) && ($Myk / 10 != 1) ) { $Otv = $Otv . $K[$Gi + 1]; } else { $Otv = $Otv . $K[$Gi + 2]; } } } else { $Myk = 0; } if ($i == 0) { if ($Myk > 4) { $Otv .= $Nai->[0]; #"рублей"; } elsif ($Myk == 1) { $Otv .= $Nai->[1]; #"рубль"; } elsif ($Myk > 0) { $Otv .= $Nai->[2]; #"рубля"; } elsif ($Num > 0) { $Otv .= $Nai->[3]; #"рублей"; } } while ($Num >= $Div) { $Num -= $Div; } $Div = $Div / 1000; } return $Otv; } sub FirstCap { my $Otv = shift; my $R = substr($Otv, 0, 1); $R =~ tr/йцукенгшщзхъфывапролджэячсмитьбюё/ЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ/; $R .= substr($Otv, 1); return $R; } 1; === cut ===

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, reLexx (?), 11:32, 12/05/2011 [ответить]  
  • +/
    При условии if ($MyN != 0) у меня выдавались слова "триллион миллиард" даже если чило умеет меньше разрядов. В результате сделал
    ($MyN > 1) - все заработало правильно.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру