You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 8.2迁移疑问:NumberFormatter::setAttribute仅支持int/float参数怎么设置分隔符?

PHP 7.4 迁移到 8.2 时 NumberFormatter 分组分隔符设置问题解决方法

问题核心在于**GROUPING_SEPARATOR_SYMBOL是文本类型属性**,你错误使用了setAttribute()方法——这个方法仅支持设置数值类型(int/float)的属性,文本类型属性必须用setTextAttribute()来操作。

PHP 7.4对类型检查较为宽松,所以之前的代码能侥幸运行,但8.2开始严格执行了属性类型与方法的匹配规则,直接抛出类型错误。

修正后的代码如下:

$fmt = new NumberFormatter(MERCHANT_LOCALE, \NumberFormatter::CURRENCY);
$fmt->setTextAttribute(\NumberFormatter::CURRENCY_CODE, "EUR");
$fmt->setTextAttribute(\NumberFormatter::GROUPING_SEPARATOR_SYMBOL, ""); // 改用setTextAttribute
$Interval_MinBoundary_Formatted = $fmt->format(\Coupons::AMOUNT_MIN);
$Interval_MaxBoundary_Formatted = $fmt->format(\Coupons::AMOUNT_MAX);

额外补充一种实现思路:如果要彻底移除千位分隔符,也可以通过设置GROUPING_SIZE属性为0实现,此时用setAttribute()即可:

$fmt->setAttribute(\NumberFormatter::GROUPING_SIZE, 0);

两种方式都能达到移除千位分隔符的效果,按需选择即可。

内容的提问来源于stack exchange,提问作者sexybit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 05:00:01