|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrew Ustinchik 2:450/142.10 25 Jun 2001 20:32:03 To : Vlad Subject : Числа прописью -------------------------------------------------------------------------------- 27 марта 2001 17:57, Vlad писанул ненароком All: V> Столкнулся тут с проблемкой: нужно числа выдавать прописью, например V> 121, как "сто двадцать один". Если кому известен модуль или хотя V> бы методика, подбросьте ссылку или совет, буду очень признателен. искал как-то, но пришлось самому писать, т.к. склонять еще надо было под слово "рубль(ей,я)". вот, если надыть.... не претендуя на оригинальность - работает. принимаются заметки о багах. подключается модулем. >=== Здесь начался propis.pm === package Propis; BEGIN {use Exporter (); our ($VERSION, @ISA, @EXPORT); $VERSION = 1.00; @ISA = qw(Exporter); @EXPORT = qw(&func1 &func2 &func3);} ############################################################################ # Перевод чисел в пропись, возможно добавление слова # "рубл(ей,я,ь)" апосля. # sub Propis($) - сюды сувать число для получения прописи # sub PropisPC($) - сюды сувать число для получения "рублей" ############################################################################ # (c) DedAU, 12.03.2001. # письма на zdau@tut.by или 2:450/142.10 для Андрея ############################################################################ #print Propis($ARGV[0]), PropisPC($ARGV[0]); #exit; #--------------------------------------------------------------------------- sub Propis($) { #--------------------------------------------------------------------------- #вывод суммы прописью #--------------------------------------------------------------------------- my $num = shift; my($text, $nn, $nm, $nnn); if ($num >= 1_000_000_000) { $nn = int($num/1_000_000_000); $text .= &P3($nn); $nm = $nn; $nnn = chop($nm); if ($nnn == 1) {$text .= "миллиард "} elsif (($nnn==2) || ($nnn==3) || ($nnn==4)) {$text .= "миллиарда "} else {$text .= "миллиардов "}; $num -= $nn*1_000_000_000; }; if ($num >= 1_000_000) { $nn = int($num/1_000_000); $text .= &P3($nn); $nm = $nn; $nnn = chop($nm); my $nnnn = chop($nm) . $nnn; if (($nnnn > 10) && ($nnnn<20)) {$text .= "миллионов "} elsif ($nnn == 1) {$text .= "миллион "} elsif (($nnn ==2) || ($nnn==3) || ($nnn==4)) {$text .= "миллиона "} else {$text .= "миллионов "}; $num -= $nn*1_000_000; }; if ($num >= 1_000) { $nn = int($num/1_000); $text .= &P3($nn); $nm = $nn; $nnn = $nm - int($nm/100)*100; if (($nnn>10) && ($nnn<15)) {$text .= "тысяч ";} else { $nnn = chop($nnn); if ($nnn == 1) {chop $text; chop $text; chop $text; $text .= "на тысяча "} elsif ($nnn==2) {chop $text; chop $text; $text .= "е тысячи "} elsif (($nnn==3) || ($nnn==4)) {$text .= "тысячи "} else {$text .= "тысяч "}}; $num -= $nn*1_000; }; if ($num > 0) {$text .= &P3($num);}; return $text; }; sub P3($) { my $n = shift; @o = qw/один два три четыре пять шесть семь восемь девять десять одиннадцать двенадцать тринадцать четырнадцать пятнадцать шестнадцать семнадцать восемнадцать девятнадцать двадцать/; @d = qw/десять двадцать тридцать сорок пятьдесят шестьдесят семьдесят восемьдесят девяносто сто/; @s = qw/сто двести триста четыреста пятьсот шестьсот семьсот восемьсот девятьсот/; undef my $t; undef my $e; if (($n>99) && ($n<1000)) {$e = int($n/100); $t .= "$s[$e-1] "; $n -= if (($n>$e*100;}; if (($n>20) && ($n<100)) {$e = int($n/10); $t .= "$d[$e-1] "; $n -= if (($n>$e*10;}; if ((!$n==0) && ($n<21)) {$t .= "$o[$n-1] "}; return $t;}; #--------------------------------------------------------------------------- sub PropisPC($) { #--------------------------------------------------------------------------- #добавляет к сумме прописью "рубль(я)(ей)" #--------------------------------------------------------------------------- my $n = shift; my $nn = chop($n); my $nnn = chop($n) . $nn; my $t = "рублей"; if (($nnn ==11) || ($nnn==12) || ($nnn==13) || ($nnn==14)) {return $t} elsif ($nn == 1) {$t = "рубль"} elsif (($nn ==2) || ($nn==3) || ($nn==4)) {$t = "рубля"}; return $t;}; END {} 1; =head1 NAME Propis - конвертирует числа в пропись с возможностью добавления "рублей" =head1 SYNOPSIS Propis::Propis(число) число прописью Propis::PropisPC(число) добавлние "рубл(я, ей, ь)" по смыслу =head1 DESCRIPTION Модуль I<Propis> позволяет выводить числовые данные прописью, с возможностью добавления слова -рублей- -рубля- -рубль- по смыслу. =head1 EXAMPLE use Propis; print Propis::Propis($ARGV[0]), Propis::PropisPC($ARGV[0]); =head1 AUTHOR Андрей zdau@tut.by =cut >=== Здесь скончался propis.pm === вот... [one man and his NoteBook with Linux] С уважением - Дядюшка AU. np(by mp3blaster): Depeche Mode - Ultra (?) ... Вот глюкну, и на душе спокойней... --- Выписан под наблюдение pайонного паталогоанатома - GoldED+/LNX 1.1.4.7 * Origin: Мы на пепси ставим крест, ПИВО - поколенье next !!! (2:450/142.10) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/32383b37764b.html, оценка из 5, голосов 10
|