Знакомство с утилитарным классом Laravel Number

Источник: «Introducing the Laravel Number Utility Class»
В Laravel появился новый класс Number, предоставляющий несколько новых хелперов для форматирования чисел.

Всем привет, это Каен! Я рад поделиться недавним дополнением к фреймворку Laravel ([10.x] Add a Number utility class #48845), которое, по моему мнению, упростит ваши потребности в форматировании чисел. Я представил новый утилитарный класс Number, предоставляющий несколько новых хелперов для форматирования чисел, и он должен появиться в следующем релизе Laravel на этой неделе (уже вышел).

Ещё один бонус: хелперы ориентированы на локаль, поэтому вы можете форматировать числа в соответствии с текущей локалью, как глобально, так и для каждого метода!

Предыстория

Во многих приложениях часто возникает необходимость форматировать числа в соответствии с различными требованиями, например, отображать их в виде валюты, процентов или человеко-понятных размеров файлов. В Laravel не было специализированной утилиты для этого, поэтому с помощью сообщества я решил создать её. Я работал над этим классом утилиты некоторое время и очень рад, что он был включён во фреймворк. Давайте посмотрим, что она предлагает.

Класс Laravel Number

Введение

Все методы являются частью класса Illuminate\Support\Number:

use Illuminate\Support\Number;

Общее форматирование чисел

Используя метод format, мы можем отформатировать число в соответствии с текущей локалью.

Number::format(25) // 25
Number::format(100000) // 100,000
Number::format(123456789) // 123,456,789

Мы также можем указать произвольную локаль, чтобы отформатировать число в соответствии с правилами этой локали.

Number::format(123456789, locale: 'en') // 123,456,789
Number::format(123456789, locale: 'de') // 123.456.789
Number::format(123456789, locale: 'sv') // 123 456 789

Форматирование процентов

Метод formatPercentage форматирует число как проценты в соответствии с текущей локалью.

Number::percentage(25) // 25%
Number::percentage((1/3) * 100, precision: 2) // 33.33%

Форматирование валют

Вот ещё один забавный метод, используемый для форматирования различных валют с поддержкой локалей. Идеально подходит для ваших интернет-магазинов!

Number::toCurrency(10) // $10.00
Number::toCurrency(25, currency: 'EUR') // €25.00
Number::toCurrency(5.49, currency: 'EUR', locale: 'de') // 5.49 €

Форматирование размера файла

Это метод toFileSize, который, собственно, и является причиной создания этого класса. Сначала я подал PR на добавление хелпера File::bytesToHuman() ([10.x] Add a File::bytesToHuman() helper #48827), который Тейлор предложил добавить как часть нового класса Number.

Number::toFileSize(1024); // 1 KB
Number::toFileSize(1600, precision: 2); // 1.56 KB
Number::toFileSize(1024 * 1024 * 1024 * 5); // 5 GB

Человеко-читаемое форматирование

Следующий вариант — тоже довольно забавный, для тех случаев, когда вам нужно не точное, а более читабельное число. Он преобразует числа в человеко-читаемую строку.

Number::forHumans(1000) // 1 thousand
Number::forHumans(12345) // 12 thousand
Number::forHumans(12345, precision: 3) // 12.345 thousand

Установка локали

Мы можем установить локаль глобально с помощью метода setLocale, например, в сервис провайдере:

Number::setLocale('sv');

Вы также можете использовать метод withLocale, выполняющий заданный обратный вызов/callback с использованием указанной локали, а затем восстанавливающий исходную локаль:

Number::withLocale('sv', function () {
return Number::format(123456789);
});

Заключение

Надеюсь, это новое дополнение немного облегчит вам жизнь при работе с форматированием чисел в Laravel. Пожалуйста, проверьте следующий релиз Laravel и включите этот класс в свои проекты. Счастливого кодинга!

Обновление 11/21/2023: Хелперы Number теперь задокументирован в официальной документации по хелперам Laravel.

Дополнительные материалы

Предыдущая Статья

Основы TypeScript: Примитивы и базовые типы

Следующая Статья

Основы TypeScript: Неявные и Явные типы, Утверждения типов