微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 PHP 给我发送根据手册正确参数到 NumberFormatter 的 format() 的致命错误?

如何解决为什么 PHP 给我发送根据手册正确参数到 NumberFormatter 的 format() 的致命错误?

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

public 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','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

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?