如果您需要在 NumberHelper
视图之外使用 View
功能,请使用 Number
类
namespace App\Controller;
use Cake\I18n\Number;
class UsersController extends AppController
{
public function initialize(): void
{
parent::initialize();
$this->loadComponent('Authentication.Authentication');
}
public function afterLogin()
{
$identity = $this->Authentication->getIdentity();
$storageUsed = $identity->storage_used;
if ($storageUsed > 5000000) {
// Notify users of quota
$this->Flash->success(__('You are using {0} storage', Number::toReadableSize($storageUsed)));
}
}
}
所有这些函数都返回格式化的数字;它们不会自动将输出回显到视图中。
此方法用于根据 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
,它将清除当前存储的值。
默认货币的获取器。如果之前使用 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]'
此方法允许您配置格式化程序默认值,这些默认值会在对各种方法的调用之间持续存在。
示例
Number::config('en_IN', \NumberFormatter::CURRENCY, [
'pattern' => '#,##,##0'
]);