LINUX.ORG.RU

Подскажите программу


0

0

Которая переводит число в текстовый вид, т.е 4569.23 => "Четыре тысячи пятьсот шестьдесят девять рублей двадцать три копейки". Нужно для автоматического заполнения документов.

anonymous
Ответ на: комментарий от friday

хотя регекспы здесь использовать не совсем удобно.

сплитаешь число по точке и бежишь по каждой части справа налево. дальше ясно?

friday ★★★
()

Вот тебе :)
Посторонним - не критиковать :)
Хотя... посторонним - критиковать

#!/usr/bin/perl
#4569.23 => "Четыре тысячи пятьсот шестьдесят девять рублей двадцать три копейки"
print "Введите число \n";
$num=<STDIN>;
$ln=length($num)-1;
@signs=();
for ($i=0; $i<$ln; $i++){
@signs[$i]=substr($num, $i, 1);
}
$a=0;
while (($signs[$a] != ".") or ($signs[$a] eq "0")) {
$int=$int.$signs[$a];
$a++;
};
$float=substr($num, $a+1, $ln-$a);
chop($float);
if (length($float) > 2) {
print "incorrect number";
exit;
};
$tenx=false;
for ($i=0; $i<$a; $i++){
$b=$a-$i;
if ($b == 5){
if ($signs[$i] == 1) { $thousand10 = "десять "; }
if ($signs[$i] == 2) { $thousand10 = "двадцать "; }
if ($signs[$i] == 3) { $thousand10 = "тридцать "; }
if ($signs[$i] == 4) { $thousand10 = "сорок "; }
if ($signs[$i] == 5) { $thousand10 = "пятьдесят "; }
if ($signs[$i] == 6) { $thousand10 = "шестьдесят "; }
if ($signs[$i] == 7) { $thousand10 = "семьдесят "; }
if ($signs[$i] == 8) { $thousand10 = "восемьдесят "; }
if ($signs[$i] == 9) { $thousand10 = "девяносто "; }
};
if ($b == 4){
if ($signs[$i] == 1) { $thousand = "одна "; }
if ($signs[$i] == 2) { $thousand = "две "; }
if ($signs[$i] == 3) { $thousand = "три "; }
if ($signs[$i] == 4) { $thousand = "четыре "; }
if ($signs[$i] == 5) { $thousand = "пять "; }
if ($signs[$i] == 6) { $thousand = "шесть "; }
if ($signs[$i] == 7) { $thousand = "семь "; }
if ($signs[$i] == 8) { $thousand = "восемь "; }
if ($signs[$i] == 9) { $thousand = "девять "; }
};
if ($b == 3){
if ($signs[$i] == 1) { $hundred = "сто "; }
if ($signs[$i] == 2) { $hundred = "двести "; }
if ($signs[$i] == 3) { $hundred = "триста "; }
if ($signs[$i] == 4) { $hundred = "четыреста "; }
if ($signs[$i] == 5) { $hundred = "пятьсот "; }
if ($signs[$i] == 6) { $hundred = "шестьсот "; }
if ($signs[$i] == 7) { $hundred = "семьсот "; }
if ($signs[$i] == 8) { $hundred = "восемьсот "; }
if ($signs[$i] == 9) { $hundred = "девятьсот "; }
};
if ($b == 2){
if ($signs[$i] == 1) {
if ($signs[$i+1] eq "0") {$tens = "десять "; }
else{
$tenx = true;
if ($signs[$i+1] == 1) { $units= "одиннадцать "; }
if ($signs[$i+1] == 2) { $units = "двенадцать "; }
if ($signs[$i+1] == 3) { $units = "тринадцать "; }
if ($signs[$i+1] == 4) { $units = "четырнадцать "; }
if ($signs[$i+1] == 5) { $units = "пятнадцать "; }
if ($signs[$i+1] == 6) { $units = "шестнадцать "; }
if ($signs[$i+1] == 7) { $units = "семнадцать "; }
if ($signs[$i+1] == 8) { $units = "восемнадцать "; }
if ($signs[$i+1] == 9) { $units = "девятнадцать "; }
};
};
if ($signs[$i] == 2) { $tens = "двадцать "; }
if ($signs[$i] == 3) { $tens = "тридцать "; }
if ($signs[$i] == 4) { $tens = "сорок "; }
if ($signs[$i] == 5) { $tens = "пятьдесят "; }
if ($signs[$i] == 6) { $tens = "шестьдесят "; }
if ($signs[$i] == 7) { $tens = "семьдесят "; }
if ($signs[$i] == 8) { $tens = "восемьдесят "; }
if ($signs[$i] == 9) { $tens = "девяносто "; }
};
if (($b == 1) and ($tenx eq false )){
if ($signs[$i] == 1) { $units= "один "; }
if ($signs[$i] == 2) { $units = "два "; }
if ($signs[$i] == 3) { $units = "три "; }
if ($signs[$i] == 4) { $units = "четыре "; }
if ($signs[$i] == 5) { $units = "пять "; }
if ($signs[$i] == 6) { $units = "шесть "; }
if ($signs[$i] == 7) { $units = "семь "; }
if ($signs[$i] == 8) { $units = "восемь "; }
if ($signs[$i] == 9) { $units = "девять "; }
};
};

if ($thousand eq "одна ") {$thousand_name="тысяча "; }
elsif (($thousand eq "две ") or ($thousand eq "три ") or ($thousand eq "четыре ")) { $thousand_name="тысячи "; }
else { if ($a >=4 ) {$thousand_name="тысяч "; } };

if (($units eq "один ") ) { $units_name="рубль "; }
elsif (($units eq "два ") or ($units eq "три ") or ($units eq "четыре ")) { $units_name="рубля "; }
else { if ($a >= 1) { $units_name="рублей "; } };

$int_word= $thousand10.$thousand.$thousand_name.$hundred.$tens.$units.$units_name;

print "$int_word";



@float_signs= ();
$float_signs[0]= $signs[$a+1];
$float_signs[1]= $signs[$a+2];

$tenx=false;
if ($float_signs[0] == 1) {
if ($float_signs[1] eq "0") {
$float_tens = "десять ";
}else{
$tenx = true;
if ($float_signs[1] == 1) { $float_units= "одиннадцать "; }
if ($float_signs[1] == 2) { $float_units = "двенадцать "; }
if ($float_signs[1] == 3) { $float_units = "тринадцать "; }
if ($float_signs[1] == 4) { $float_units = "четырнадцать "; }
if ($float_signs[1] == 5) { $float_units = "пятнадцать "; }
if ($float_signs[1] == 6) { $float_units = "шестнадцать "; }
if ($float_signs[1] == 7) { $float_units = "семнадцать "; }
if ($float_signs[1] == 8) { $float_units = "восемнадцать "; }
if ($float_signs[1] == 9) { $float_units = "девятнадцать "; }
};
}else{
if ($float_signs[0] == 2) { $float_tens = "двадцать "; }
if ($float_signs[0] == 3) { $float_tens = "тридцать "; }
if ($float_signs[0] == 4) { $float_tens = "сорок "; }
if ($float_signs[0] == 5) { $float_tens = "пятьдесят "; }
if ($float_signs[0] == 6) { $float_tens = "шестьдесят "; }
if ($float_signs[0] == 7) { $float_tens = "семьдесят "; }
if ($float_signs[0] == 8) { $float_tens = "восемьдесят "; }
if ($float_signs[0] == 9) { $float_tens = "девяносто "; }

#if ($tenx eq false){
if ($float_signs[1] == 1) { $float_units= "одна "; }
if ($float_signs[1] == 2) { $float_units = "две "; }
if ($float_signs[1] == 3) { $float_units = "три "; }
if ($float_signs[1] == 4) { $float_units = "четыре "; }
if ($float_signs[1] == 5) { $float_units = "пять "; }
if ($float_signs[1] == 6) { $float_units = "шесть "; }
if ($float_signs[1] == 7) { $float_units = "семь "; }
if ($float_signs[1] == 8) { $float_units = "восемь "; }
if ($float_signs[1] == 9) { $float_units = "девять "; }
#};
};

if ($float_units eq "одна ") { $kop_word = "копейка "; }
elsif (($float_units eq "две ") or ($float_units eq "три ") or ($float_units eq "четыре ")) { $kop_word="копейки "; }
else { $kop_word="копеек "; };

$float_word=$float_tens.$float_units.$kop_word;

print "$float_word\n";

kuz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.