1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
function num2text($num) {
$ones = array(
0 => 'ноль', 1 => 'один', 2 => 'два', 3 => 'три', 4 => 'четыре',
5 => 'пять', 6 => 'шесть', 7 => 'семь', 8 => 'восемь', 9 => 'девять'
);
$tens = array(
10 => 'десять', 11 => 'одиннадцать', 12 => 'двенадцать', 13 => 'тринадцать',
14 => 'четырнадцать', 15 => 'пятнадцать', 16 => 'шестнадцать', 17 => 'семнадцать',
18 => 'восемнадцать', 19 => 'девятнадцать', 20 => 'двадцать', 30 => 'тридцать',
40 => 'сорок', 50 => 'пятьдесят', 60 => 'шестьдесят', 70 => 'семьдесят',
80 => 'восемьдесят', 90 => 'девяносто'
);
$hundreds = array(
100 => 'сто', 200 => 'двести', 300 => 'триста', 400 => 'четыреста',
500 => 'пятьсот', 600 => 'шестьсот', 700 => 'семьсот', 800 => 'восемьсот',
900 => 'девятьсот'
);
$thousands = array(
1000 => 'тысяча', 1000000 => 'миллион', 1000000000 => 'миллиард'
);
$text = '';
if ($num < 0) {
$text = 'минус ';
$num = abs($num);
}
$num = number_format($num, 2, '.', '');
$parts = explode('.', $num);
$int_part = $parts[0];
$dec_part = $parts[1];
if ($int_part == 0) {
$text .= $ones[0] . ' рублей';
} else {
$i = 0;
$int_part = strrev($int_part);
while (isset($thousands[pow(1000, $i)]) && $i < count($thousands)) {
$thousand = $thousands[pow(1000, $i)];
$num_part = substr($int_part, $i * 3, 3);
$num_part = strrev($num_part);
$hundred = isset($hundreds[$num_part[0] * 100]) ? $hundreds[$num_part[0] * 100] . ' ' : '';
$ten = '';
if ($num_part[1] == 1) {
$ten = $tens[$num_part[1] * 10 + $num_part[0]];
} else {
$ten = isset($tens[$num_part[1] * 10]) ? $tens[$num_part[1] * 10] . ' ' : '';
$one = isset($ones[$num_part[0]]) ? $ones[$num_part[0]] : '';
$ten = $ten . $one;
}
$text_part = $hundred . $ten . ' ' . $thousand . ' ';
$text = $text_part . $text;
$i++;
}
$text .= 'рублей';
}
if ($dec_part > 0) {
$dec_part = strrev($dec_part);
$tens = '';
if ($dec_part[1] == 1) {
$tens = $tens[$dec_part[1] * 10 + $dec_part[0]];
} else {
$tens = isset($tens[$dec_part[1] * 10]) ? $tens[$dec_part[1] * 10] . ' ' : '';
$ones = isset($ones[$dec_part[0]]) ? $ones[$dec_part[0]] : '';
$tens = $tens . $ones;
}
$text .= ' ' . $tens . ' копеек';
}
return ucfirst($text);
}
$num = 1234.56;
$text = num2text($num);
echo $text; // выводит "Одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек"
|