数字

class Cake\I18n\Number

如果您需要在 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)));
        }
    }
}

所有这些函数都返回格式化的数字;它们不会自动将输出回显到视图中。

格式化货币值

Cake\I18n\Number::currency(mixed $value, string $currency = null, array $options = [])

此方法用于根据 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

设置为 true 以用国际货币代码替换货币符号。

如果 $currency 值为 null,则默认货币将从 Cake\I18n\Number::defaultCurrency() 中检索。要以会计格式格式化货币,您应该设置货币格式

Number::setDefaultCurrencyFormat(Number::FORMAT_CURRENCY_ACCOUNTING);

设置默认货币

Cake\I18n\Number::setDefaultCurrency($currency)

默认货币的设置器。这消除了始终将货币传递给 Cake\I18n\Number::currency() 的需要,并通过设置其他默认值来更改所有货币输出。如果 $currency 设置为 null,它将清除当前存储的值。

获取默认货币

Cake\I18n\Number::getDefaultCurrency()

默认货币的获取器。如果之前使用 setDefaultCurrency() 设置了默认货币,则将返回该值。默认情况下,如果设置了 intl.default_locale ini 值,则将检索它;如果没有设置,则将检索 'en_US'

格式化浮点数

Cake\I18n\Number::precision(float $value, int $precision = 3, array $options = [])

此方法以指定的精度(小数位数)显示数字。它将进行四舍五入以保持定义的精度级别。

// Called as NumberHelper
echo $this->Number->precision(456.91873645, 2);

// Outputs
456.92

// Called as Number
echo Number::precision(456.91873645, 2);

格式化百分比

Cake\I18n\Number::toPercentage(mixed $value, int $precision = 2, array $options = [])

选项

描述

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
]);

与人类可读值交互

Cake\I18n\Number::toReadableSize(string $size)

此方法以人类可读的形式格式化数据大小。它提供了一种将字节转换为 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

格式化数字

Cake\I18n\Number::format(mixed $value, array $options = [])

此方法让您对视图中使用的数字格式有更多控制权(并且是大多数其他 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 !'
Cake\I18n\Number::ordinal(mixed $value, array $options = [])

此方法将输出序数。

示例

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'

格式差异

Cake\I18n\Number::formatDelta(mixed $value, array $options = [])

此方法将值差异显示为带符号的数字。

// 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]'

配置格式化程序

Cake\I18n\Number::config(string $locale, int $type = NumberFormatter::DECIMAL, array $options = [])

此方法允许您配置格式化程序默认值,这些默认值会在对各种方法的调用之间持续存在。

示例

Number::config('en_IN', \NumberFormatter::CURRENCY, [
    'pattern' => '#,##,##0'
]);