Форум — General Подскажите программу 0 0 Которая переводит число в текстовый вид, т.е 4569.23 => "Четыре тысячи пятьсот шестьдесят девять рублей двадцать три копейки". Нужно для автоматического заполнения документов. Ссылка
Ответ на: комментарий от friday 18.12.05 16:50:18 MSK хотя регекспы здесь использовать не совсем удобно. сплитаешь число по точке и бежишь по каждой части справа налево. дальше ясно? friday ★★★ (18.12.05 17:08:27 MSK) Ссылка
Вот тебе :) Посторонним - не критиковать :) Хотя... посторонним - критиковать #!/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 ★ (18.12.05 19:16:36 MSK) Показать ответ Ссылка
Ответ на: комментарий от kuz 18.12.05 19:16:36 MSK Ну вот. Смайлики гады. Ну ничего, разберешся (или смайлики только в beta ?) kuz ★ (18.12.05 19:17:45 MSK) Показать ответ Ссылка