编程

Laravel 框架引入 Laravel Number 工具类

1534 2023-11-21 15:34:00

Laravel 引入了一个新的 Number 工具类,它提供了多个新的 helper 用来格式化数字。它将在下一个 Laravel 发布版本中可用。

另一个好处是:该 helper 可以识别本地语言,因此您可以根据当语言设置数字格式,可以全局设置,也可以按方法设置!

背景

许多应用通常会根据不同需求格式化数字,比如显示为货币、百分比或者人类可读的文件大小。Laravel 原本并没有这样的专有工具, 因此 Caen 创建了一个。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, 'en') // 123,456,789
Number::format(123456789, 'de') // 123.456.789
Number::format(123456789, 'sv') // 123 456 789

百分比格式化

formatPercentage 方法根据当前语言将数字格式化为百分比。

Number::toPercentage(25) // 25%
Number::toPercentage((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 方法实际上是该工具类产生的原因。包作者 Caen 提交了一个 PR,添加 File::bytesToHuman() 辅助方法(PR #48827)。然后 Taylor 建议将其作为新增 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

设置语言 locale

可以使用 setLocale 方法全局设置语言,比如在服务提供者中设置:

Number::setLocale('sv');

你也可以使用 withLocale 方法,该方法使用指定的语言执行给定的回调函数,然后再恢复原本的语言设置:

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

结论

希望这个新添加能让你在处理 Laravel 中的数字格式时更轻松。请查看下一个 Laravel 版本,并将此工具类纳入你的项目中