大家好,我是 Caen!我很高兴与大家分享我最近对 Laravel 框架(PR #48845)的贡献,我相信它将简化你的数字格式需求。我引入了一个新的 Number
工具类,它提供了几个新的辅助方法来格式化数字,它应该在本周的下一个 Laravel 版本中可用。
作为另一个额外福利:这些辅助方法是区域设置感知的,因此你可以根据当前区域设置来格式化数字,无论是全局还是针对每个方法!
背景
在许多应用程序中,经常需要根据不同的要求来格式化数字,例如将它们显示为货币、百分比或人类可读的文件大小。Laravel 之前没有为此专门的工具,因此在社区的帮助下,我决定创建一个。我已经在这个工具类上工作了一段时间,并且非常高兴它已合并到框架中。让我们来看看它提供了什么。
Number
类
Laravel 的 简介
所有方法都是 Illuminate\Support\Number
类的一部分
use Illuminate\Support\Number;
通用数字格式化
使用 format
方法,我们可以根据当前区域设置格式化数字。
Number::format(25) // 25Number::format(100000) // 100,000Number::format(123456789) // 123,456,789
我们还可以指定一个自定义区域设置,以根据该区域设置的规则格式化数字。
Number::format(123456789, locale: 'en') // 123,456,789Number::format(123456789, locale: 'de') // 123.456.789Number::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.00Number::toCurrency(25, currency: 'EUR') // €25.00Number::toCurrency(5.49, currency: 'EUR', locale: 'de') // 5.49 €
文件大小格式化
这是 toFileSize
方法,它实际上是这个工具类的全部原因。我最初提交了一个 PR 来添加一个 File::bytesToHuman()
辅助方法(PR #48827),Taylor 然后建议我们将它添加为新的 Number
类的一部分。
Number::toFileSize(1024); // 1 KBNumber::toFileSize(1600, precision: 2); // 1.56 KBNumber::toFileSize(1024 * 1024 * 1024 * 5); // 5 GB
人类可读格式化
接下来也是一个非常有趣的方法,当你想要比精确更具可读性时使用它。它将数字转换为人类可读的字符串。
Number::forHumans(1000) // 1 thousandNumber::forHumans(12345) // 12 thousandNumber::forHumans(12345, precision: 3) // 12.345 thousand
设置区域设置
我们可以使用 setLocale
方法全局设置区域设置,例如在服务提供者中
Number::setLocale('sv');
你也可以使用 withLocale
方法,它使用指定的区域设置执行给定的回调,然后恢复原始区域设置
Number::withLocale('sv', function () { return Number::format(123456789);});
结论
我希望这个新增的功能能够在你处理 Laravel 中的数字格式化时让你的生活更轻松一些。请随时查看下一个 Laravel 版本,并将这个工具类整合到你的项目中。编码愉快!
更新 2023 年 11 月 21 日:Numbers 助手现在已在 官方 Laravel 助手文档 中进行了记录。
自由职业前端开发背景,目前是全栈 Laravel/PHP 工程师,专注于后端和网络安全,对开源充满热情。创建了基于 Laravel 的静态网站生成器 HydePHP。