1

来自手册:https ://www.php.net/manual/en/numberformatter.format.php

公共 NumberFormatter::format ( int|float $value , int $type = ? ) : 字符串

这段代码:

$a = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
$string = $a->format(123, \NumberFormatter::TYPE_CURRENCY);
var_dump($string);

导致这个:

PHP Fatal error:  Uncaught ValueError: NumberFormatter::format(): Argument #3 must be a NumberFormatter::TYPE_* constant

嗯?论据#3?没有参数#3(程序版本除外)!而这段代码(认为文档可能是错误的,之前没有人发现它):

$a = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
$string = $a->format(123, 'USD', \NumberFormatter::TYPE_CURRENCY);
var_dump($string);

但它只是导致这个:

PHP Fatal error:  Uncaught ArgumentCountError: NumberFormatter::format() expects at most 2 arguments, 3 given

好的... 那么你想要它怎么样,PHP?是3还是2?我在这一点上迷路了。

重要提示formatCurrency:即使它绝对是货币数字,我也没有使用它的原因是(在实际代码中)我试图删除货币符号,但将其格式化为货币。formatCurrency遗憾地忽略了setSymbol,但format尊重它。这就是format在这种情况下使用的原因。因此,请不要告诉我使用formatCurrency.

4

1 回答 1

1

看来intl扩展的文档有点不完整或具有误导性。似乎没有第二个类型参数的调用会在你的对象format()上产生你想要的输出:NumberFormatter::CURRENCY

$a = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
echo $string = $a->format('123');
// $123.00

$a = new \NumberFormatter('en_GB', \NumberFormatter::CURRENCY);
echo $string = $a->format('123');
// £123.00

文档显示该参数是可选的,但没有明确解释应该如何或何时使用它。在这种情况下,省略它似乎可以完成这项工作。

于 2021-01-29T20:58:57.113 回答