NumberHelper 包含方便的方法,使您能够在视图中以常用格式显示数字。这些方法包括格式化货币、百分比、数据大小、将数字格式化为特定精度,以及提供更多格式化数字的灵活性。
所有这些函数都会返回格式化的数字;它们不会自动将输出回显到视图中。
此方法用于根据 3 个字母的 ISO 4217 货币代码,以常见的货币格式(EUR、GBP、USD)显示数字。在视图中的用法如下
// Called as NumberHelper
echo $this->Number->currency($value, $currency);
// Called as Number
echo Number::currency($value, $currency);
第一个参数 $value
应该是一个浮点数,它表示您正在表达的金额。第二个参数是一个字符串,用于选择预定义的货币格式方案
$currency |
1234.56,按货币类型格式化 |
---|---|
EUR |
€1.234,56 |
GBP |
£1,234.56 |
USD |
$1,234.56 |
第三个参数是一个选项数组,用于进一步定义输出。以下选项可用
选项 |
描述 |
---|---|
before |
在渲染的数字之前显示的文本。 |
after |
在渲染的数字之后显示的文本。 |
zero |
用于零值的文本;可以是字符串或数字。例如 0、‘免费!’。 |
places |
要使用的十进制位数,例如 2。 |
precision |
要使用的最大十进制位数,例如 2。 |
locale |
用于格式化数字的区域设置名称,例如 “fr_FR”。 |
fractionSymbol |
用于分数数字的字符串,例如 ‘ 分’。 |
fractionPosition |
“before” 或 “after”,用于放置分数符号。 |
pattern |
用于格式化数字的 ICU 数字模式,例如 #,###.00 |
useIntlCode |
设置为 |
如果 $currency
值为 null
,则默认货币将从 Cake\I18n\Number::defaultCurrency()
中检索。要以会计格式格式化货币,您应该设置货币格式
Number::setDefaultCurrencyFormat(Number::FORMAT_CURRENCY_ACCOUNTING);
默认货币的设置器。这消除了始终将货币传递给 Cake\I18n\Number::currency()
的需要,并通过设置其他默认值来更改所有货币输出。如果 $currency
设置为 null
,它将清除当前存储的值。
默认货币的 getter。如果之前使用 setDefaultCurrency()
设置了默认货币,则将返回该值。默认情况下,如果设置了 intl.default_locale
ini 值,它将检索该值,否则将检索 'en_US'
。
此方法以指定的精度(小数位数)显示数字。它将进行四舍五入以保持定义的精度级别。
// Called as NumberHelper
echo $this->Number->precision(456.91873645, 2);
// Outputs
456.92
// Called as Number
echo Number::precision(456.91873645, 2);
选项 |
描述 |
---|---|
multiply |
布尔值,指示是否需要将值乘以 100。对于十进制百分比很有用。 |
与 Cake\I18n\Number::precision()
一样,此方法根据提供的精度(将数字四舍五入以满足给定的精度)格式化数字。此方法还将数字表示为百分比,并在输出中附加百分号。
// Called as NumberHelper. Output: 45.69%
echo $this->Number->toPercentage(45.691873645);
// Called as Number. Output: 45.69%
echo Number::toPercentage(45.691873645);
// Called with multiply. Output: 45.7%
echo Number::toPercentage(0.45691, 1, [
'multiply' => true
]);
此方法以人类可读的形式格式化数据大小。它提供了一种快捷方式,用于将字节转换为 KB、MB、GB 和 TB。大小将以两位精度级别显示,根据提供的数据大小(即,较大的大小将以较大的术语表示)
// Called as NumberHelper
echo $this->Number->toReadableSize(0); // 0 Byte
echo $this->Number->toReadableSize(1024); // 1 KB
echo $this->Number->toReadableSize(1321205.76); // 1.26 MB
echo $this->Number->toReadableSize(5368709120); // 5 GB
// Called as Number
echo Number::toReadableSize(0); // 0 Byte
echo Number::toReadableSize(1024); // 1 KB
echo Number::toReadableSize(1321205.76); // 1.26 MB
echo Number::toReadableSize(5368709120); // 5 GB
此方法为您提供了更多控制数字在视图中格式化的方式(也是大多数其他 NumberHelper 方法使用的主要方法)。使用此方法可能看起来像
// Called as NumberHelper
$this->Number->format($value, $options);
// Called as Number
Number::format($value, $options);
$value
参数是要格式化为输出的数字。如果没有提供 $options
,则数字 1236.334 将输出为 1,236。请注意,默认精度为零位小数。
$options
参数是此方法真正发挥作用的地方。
如果您传递一个整数,则它将成为函数的精度或位数。
如果您传递一个关联数组,您可以使用以下键
选项 |
描述 |
---|---|
places |
要使用的十进制位数,例如 2。 |
precision |
要使用的最大小数位数,例如 2 |
pattern |
用于格式化数字的 ICU 数字模式,例如 #,###.00 |
locale |
用于格式化数字的区域设置名称,例如 “fr_FR”。 |
before |
在渲染的数字之前显示的文本。 |
after |
在渲染的数字之后显示的文本。 |
示例
// Called as NumberHelper
echo $this->Number->format('123456.7890', [
'places' => 2,
'before' => '¥ ',
'after' => ' !'
]);
// Output '¥ 123,456.79 !'
echo $this->Number->format('123456.7890', [
'locale' => 'fr_FR'
]);
// Output '123 456,79 !'
// Called as Number
echo Number::format('123456.7890', [
'places' => 2,
'before' => '¥ ',
'after' => ' !'
]);
// Output '¥ 123,456.79 !'
echo Number::format('123456.7890', [
'locale' => 'fr_FR'
]);
// Output '123 456,79 !'
此方法将输出序数。
示例
echo Number::ordinal(1);
// Output '1st'
echo Number::ordinal(2);
// Output '2nd'
echo Number::ordinal(2, [
'locale' => 'fr_FR'
]);
// Output '2e'
echo Number::ordinal(410);
// Output '410th'
此方法将值差异显示为带符号数字
// Called as NumberHelper
$this->Number->formatDelta($value, $options);
// Called as Number
Number::formatDelta($value, $options);
$value
参数是要格式化为输出的数字。如果没有提供 $options
,则数字 1236.334 将输出为 1,236。请注意,默认精度为零位小数。
$options
参数接受与 Number::format()
本身相同的键
选项 |
描述 |
---|---|
places |
要使用的十进制位数,例如 2。 |
precision |
要使用的最大小数位数,例如 2 |
locale |
用于格式化数字的区域设置名称,例如 “fr_FR”。 |
before |
在渲染的数字之前显示的文本。 |
after |
在渲染的数字之后显示的文本。 |
示例
// Called as NumberHelper
echo $this->Number->formatDelta('123456.7890', [
'places' => 2,
'before' => '[',
'after' => ']'
]);
// Output '[+123,456.79]'
// Called as Number
echo Number::formatDelta('123456.7890', [
'places' => 2,
'before' => '[',
'after' => ']'
]);
// Output '[+123,456.79]'
警告
所有符号都是 UTF-8。