3.5 KiB
Number — числа
App\Helpers\Number — форматирование чисел, размеров и русские склонения.
use App\Helpers\Number;
Форматирование
numFormat($number, $decimal = 0, $after = ',', $thousand = '.')
Обёртка number_format. Важно: для «пустого»/нулевого значения возвращает
пустую строку '', а не 0.
Number::numFormat(1234567, 0, ',', ' '); // '1 234 567'
Number::numFormat(1234.5, 2, '.', ' '); // '1 234.50'
Number::numFormat(0); // '' ← учтите в вёрстке
decimal($number, $scale = 2)
Нормализует число для DECIMAL-полей БД: всегда с точкой, ноль не скрывает.
Number::decimal('1 234,5', 2); // '1234.50'
Number::decimal(0); // '0.00'
numberFormat($string, $type = null) / numberDeFormat($string)
Форматирование по типу и обратное снятие форматирования (строка → «сырое» число).
Размеры
formatSize($size) / getTextSize($size)
Байты → человекочитаемый размер.
Number::formatSize(1048576); // '1 МБ'
Number::formatSize(2560); // '2.5 КБ'
Русские склонения (важно для UI)
declensionNum($number, $titles)
Возвращает число + правильную форму слова. $titles — массив из 3 форм:
[1, 2-4, 5-0].
Number::declensionNum(1, ['товар', 'товара', 'товаров']); // '1 товар'
Number::declensionNum(3, ['товар', 'товара', 'товаров']); // '3 товара'
Number::declensionNum(25, ['товар', 'товара', 'товаров']); // '25 товаров'
Если нужна только форма слова без числа — это
Locales::datePhrase($n, $titles).
numberToWords($number)
Число прописью (английский алфавит слов).
Сравнение и прочее
compareNumbers($float1, $float2, $operator = '=')
Сравнение чисел с плавающей точкой через эпсилон (0.00001) — избегает ошибок
0.1 + 0.2 != 0.3. Операторы: =/eq, </lt, >/gt, <=, >=.
if (Number::compareNumbers($sum, $expected, '=')) { ... } // безопасно для float
if (Number::compareNumbers($price, 0, '>')) { ... }
priceCourse($price, $format = true, $float = null)
Подготовка цены к выводу: $float === false — округлить до целого; $format —
применить форматирование.
Number::priceCourse(1234.7, true, false); // '1 235' (округлено + формат)
randomNumber($digits = 1), microtimeDiff($a, $b)
Случайное число заданной разрядности; разница между двумя microtime.
Рецепты
Счётчик в интерфейсе:
echo Number::declensionNum($count, ['документ', 'документа', 'документов']);
Цена в карточке товара:
echo Number::numFormat($product['price'], 0, ',', ' ') . ' ₽';
Запись цены в БД (DECIMAL):
$row['price'] = Number::decimal($input['price'], 2);