Skip to content

Numbers

从 Laravel 框架 10.33.0 开始,Laravel 提供了新的 Numbers 类,该类提供了一些方便的静态方法,用于处理数字。

比如常见的格式化金额、百分比、货币、文件尺寸、人类可读性等。

更多关于 Number 的官方文档地址请点击这里

abbreviate() 人类可读

Number::abbreviate() 方法返回所提供数值的人类可读格式,以及单位缩写,它是 forHumans 方法的封装:

php
use Illuminate\Support\Number;
 
Number::abbreviate(1000); // 1K
 
Number::abbreviate(489939); // 490K
 
Number::abbreviate(1230000, precision: 2); // 1.23M

format() 格式化

Number::format() 方法将给定的数字格式化为区域设置特定的分割符,一般会用于格式化金额的情况:

php
use Illuminate\Support\Number;

# 默认每逢千位添加,分割符
Number::format(100000); // 100,000

# 保留小数点后两位
Number::format(100000, precision: 2); // 100,000.00

# 设置最大精度
Number::format(100000.123, maxPrecision: 2); // 100,000.12

# 根据语言判断添加符
Number::format(100000, locale: 'zh_CN'); // 100,000
$number = Number::format(100000, locale: 'de'); // 100.00

percentage() 百分比

Number::percentage() 方法将给定的数字转换为百分比的形式:

php
use Illuminate\Support\Number;

# 默认是整型百分比
Number::percentage(10); // 10%

# 保留小数点后两位
Number::percentage(10, precision: 2); // 10.00%

# 设置最大精度
Number::percentage(10.123, maxPrecision: 2); // 10.12%

# 根据语言判断添加符
Number::percentage(10, precision: 2, locale: 'zh_CN'); // 10.00%
Number::percentage(10, precision: 2, locale: 'de'); // 10,00%

currency() 货币

Number::currency() 方法以字符串形式返回给定值的货币表示形式:

php
use Illuminate\Support\Number;

# 默认每逢千位添加,分割符(默认保留两位小数点)
Number::currency(1000); // $1,000.00

# 设置货币前缀
Number::currency(1000, in: 'EUR'); // €1,000.00

# 根据语言判断添加符
Number::currency(1000, in: 'EUR', locale: 'de'); // 1.000,00 €
Number::currency(1000, in: 'CNY', locale: 'zh_CN'); // ¥1,000.00

fileSize() 文件尺寸

Number::fileSize() 方法以字符串形式返回给定字节值的文件大小表示形式:

php
use Illuminate\Support\Number;

# 根据当前大小转换成适合的文件大小表示
Number::fileSize(1024 * 56); // 56 KB
Number::fileSize(1024 * 1024 * 56); // 56 MB

# 保留小数点后两位
Number::fileSize(1024 * 5566, precision: 2); // 5.44 MB

forHumans() 人类可读

Number::forHumans() 方法返回所提供数值的人类可读格式:

php
use Illuminate\Support\Number;

Number::forHumans(1000); // 1 thousand
Number::forHumans(489939); // 490 thousand

# 保留小数点后两位 
Number::forHumans(1234000, precision: 2); // 1.23 million

Number::forHumans(1234000, maxPrecision: 2); // 1.23 million

ordinal() 序列

Number::ordinal() 方法返回数字的序数表示形式:

php
use Illuminate\Support\Number;

Number::ordinal(1); // 1st

Number::ordinal(2); // 2nd

Number::ordinal(21); // 21st

spell() 单词字符串

Number::spell() 方法将给定的数字转换为单词字符串:

php
use Illuminate\Support\Number;
 
Number::spell(102); // one hundred and two
 
Number::spell(808, locale: 'zh_CN'); // 八百〇八
Number::spell(808, locale: 'zh_TW');// 八百零八

trim() 去除小数点后多余的0

php
Number::trim(12); // 12
Number::trim(120); // 120
Number::trim(12.0); // 12
Number::trim(12.3); // 12.3
Number::trim(12.30); // 12.3
Number::trim(12.3456789); // 12.3456789
Number::trim(12.34567890000); // 12.3456789

其它方法

useLocale()

Number::useLocale() 方法全局设置默认数字区域设置,这会影响后续 Number 调用该类方法时如何格式化数字和货币:

php
use Illuminate\Support\Number;

public function boot(): void
{
    Number::useLocale('de');
}

withLocale()

Number::withLocale() 方法使用指定的语言环境执行给定的闭包,然后在回调执行后恢复原始语言环境:

php
use Illuminate\Support\Number;
 
Number::withLocale('zh_CN', function () {
    return Number::format(1500);
});