И снова здравствуйте. Часто возникает задача форматировать числовые значения, чаще всего какую-то сумму, прописью. Обычно это нужно вносить в различного рода бухгалтерские документы, типа счетов, накладных и пр. Это можно сделать в Excel написав определенную формулу, но так как мы здесь изучаем программирование, то напишем функцию, которая будет делать то же самое. Для этого нам понадобится встроенный в PHP класс NumberFormatter. Но для начала нужно разобраться с возможной ошибкой при попытке создания экземпляра этого класса.
Fatal error: Uncaught Error: Class ‘NumberFormatter’ not found
Это значит только одно — в версии PHP, которую вы используете выключена настройка — intl и ее просто нужно включить.
Вместо:
Должно быть:
То есть просто нужно раскомментировать в файле php.ini и перезагрузить вебсервер.
Функция суммы прописью
Сейчас мы напишем небольшую функцию, которая будет делать это автоматически и на вход будет принимать только один аргумент — саму сумму. После чего можно уже не задаваться вопросом: как правильно писать сумму прописью, за нас это сделает PHP.
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
| // сумма прописью
function str_price($value)
{
$value = explode('.', number_format($value, 2, '.', ''));
$f = new \NumberFormatter('ru', \NumberFormatter::SPELLOUT);
$str = $f->format($value[0]);
$str2 = $f->format($value[1]);
// Первую букву в верхний регистр.
$str = mb_strtoupper(mb_substr($str, 0, 1)) . mb_substr($str, 1, mb_strlen($str));
// Склонение слова "рубль".
$num = $value[0] % 100;
if ($num > 19) {
$num = $num % 10;
}
switch ($num) {
case 1: $rub = 'рубль'; break;
case 2:
case 3:
case 4: $rub = 'рубля'; break;
default: $rub = 'рублей';
}
//Копейки числом
return $str . ' ' . $rub . ' ' . $value[1] . ' копеек.';
// Копейки прописью
//return $str . ' ' . $rub . ' ' . $str2 . ' копеек.';
} |
// сумма прописью
function str_price($value)
{
$value = explode('.', number_format($value, 2, '.', ''));
$f = new \NumberFormatter('ru', \NumberFormatter::SPELLOUT);
$str = $f->format($value[0]);
$str2 = $f->format($value[1]);
// Первую букву в верхний регистр.
$str = mb_strtoupper(mb_substr($str, 0, 1)) . mb_substr($str, 1, mb_strlen($str));
// Склонение слова "рубль".
$num = $value[0] % 100;
if ($num > 19) {
$num = $num % 10;
}
switch ($num) {
case 1: $rub = 'рубль'; break;
case 2:
case 3:
case 4: $rub = 'рубля'; break;
default: $rub = 'рублей';
}
//Копейки числом
return $str . ' ' . $rub . ' ' . $value[1] . ' копеек.';
// Копейки прописью
//return $str . ' ' . $rub . ' ' . $str2 . ' копеек.';
}
После чего мы можем смело использовать эту функцию:
Получаем: Сорок пять тысяч пятьсот шестьдесят пять рублей 60 копеек.
Если же нужно, чтобы сумма в копейках тоже была прописью, то раскомментируйте второй return, а первый наоборот закомментируйте и тогда все будет работать корректно.
Сумма прописью онлайн
Специально для демонстрации работы этой функции вы можете самостоятельно протестировать ее работу и убедиться, что сумма корректно выводится прописью, учитывая копейки. Они разделяются точной, но не запятой, это нужно учитывать.
СУММА ПРОПИСЬЮ ОНЛАЙН
Добавить комментарий