PHP « Пишем функцию перевода чисел в строки (33 -> Тридцать три) на php и js
Помогите написать функцию, которая получает число с типом (double), например 33.61, а возвращает строку "Тридцать три рубля 61 копейка". Число можно передать любое. Есть мысли как реализовать на PHP или Javascript?
1 ответов
Могут быть ошибки, как пример пойдет.
$rubl = array("рубль","рубля","рублей");
$cops = array("копейка","копейки","копеек");
$thousand = array(
array(),
array("тысяча","тысячи","тысяч"),
array("миллион","миллиона","миллионов")
);
$words = array(
0 => array("", "один","два","три","четыре"),
1 => array("", "десять","двадцасть","тридцать","сорок","пятдесят","шестьдесят","семдесят","восемдесят","девяносто","","одинадцать","двенадцать","тринадцвть","четырнадцать","пятнадцать","шестнадцать","семнадцать","восемнадцать","девятнадцать"),
2 => array("", "сто", "двести", "триста"),
3 => array("", "одна", "две", "три")
);
$float = 3318.61;
$integer = (string)(int)$float;
$fraction = (string)(int)(($float*100)%100);
$str = array();
$size = strlen($integer);
$degree = 0;
do {
--$size;
$num = (int)substr($integer, $size, 1);
$tens = ($integer%100);
if($tens>10 && $tens<20 && $degree < 2){
if($degree == 0){
--$size;
++$degree;
$str[] = $words[$degree][$tens];
}
} else {
$t = NULL;
if($degree){
if($degree%3 == 0){
$t = $thousand[$degree/3];
}
}
if($t){
$str[] = num2word($num, $t);
}
$str[] = $words[$degree][$num];
}
++$degree;
} while($size);
echo @implode(" ", array_reverse($str))." ".num2word($integer, $rubl)." ".$fraction." ".num2word($fraction, $cops)."\n";
// три тысячи триста восемнадцать рублей 61 копейка
// ---------------------
function num2word($num,$words) {
$num=$num%100;
if ($num>19) { $num=$num%10; }
switch ($num) {
case 1: { return($words[0]); }
case 2: case 3: case 4: { return($words[1]); }
default: { return($words[2]); }
}
}