Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Числа прописью   Vlad   27 Mar 2001 17:57:49 
 Re: Числа прописью   Artem Chuprina   27 Mar 2001 18:42:55 
 Re: Числа прописью   Nikolay Pichtin   27 Mar 2001 22:40:47 
 Числа прописью   Andrew Ustinchik   25 Jun 2001 20:32:03 
 Re: Числа прописью   Ruslan Bondarev   26 Jun 2001 08:15:17 
 Re: Числа прописью   Ilya Rubtsov   27 Jun 2001 01:53:57 
 Re: Числа прописью   Ruslan Bondarev   27 Jun 2001 08:46:26 
 Re: Числа прописью   Alexander Babanov   27 Jun 2001 14:39:26 
 Re: Числа прописью   Ruslan Bondarev   28 Jun 2001 09:27:41 
 Числа пpописью   Albert N. MICHEEV   28 Jun 2001 00:15:26 
 Re: Числа пpописью   Ruslan Bondarev   28 Jun 2001 09:29:26 
 Числа прописью   pavel kurnosoff   28 Jun 2001 00:21:48 
 Re: Числа прописью   Dmitry Chertischev   26 Jun 2001 23:56:35 
 Re: Числа прописью   Nikolay Pichtin   28 Jun 2001 09:02:54 
Архивное /ru.perl/32383b37764b.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional