在我竭尽全力恢复 PHP 7.4.13 以确保它之前,我以为我快疯了。它在 PHP 8.x 中发生了变化!
代码:
$a = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
$a->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, 8);
$a->setSymbol(NumberFormatter::CURRENCY_SYMBOL, ''); // It's empty because I want it "minimal" for a table.
var_dump($a->formatCurrency(0.0043, 'BTC'));
PHP 7.4.13 中的输出:
string(6) "0.0043"
PHP 8.0.1 中的输出:
string(11) "BTC 0.0043"
结论:
有些事情发生了变化。
问题:
如何让 PHP 8.0.1 表现得像以前一样?
澄清:
即,以“最小”的方式输出的货币总和,仅用数字。
预测一:
有人可能会这样回答:“只需手动输出这些情况下的数字!”
对此,我回应:它必须是货币模式下的数字格式化程序。在如何格式化货币金额方面,地区/语言之间存在巨大差异。我需要使用它并告诉它放弃符号。
预测二:
有人可能会这样回答:“只需将 str_replace/preg_replace 符号替换掉!简单!”
对此,我回应:并非所有语言环境/语言都使用相同的格式。这是一门具有多种不同格式的完整科学,无法通过简单的字符串替换来解释。
我想正确地做这件事,这就是我认为的。直到现在,当 PHP 8 决定改变这一点时。我不确定这是一个错误还是什么。
研究:
我在这里找不到任何关于 PHP 8 的提及:https ://www.php.net/manual/en/numberformatter.formatcurrency.php