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
相关产品推荐
相关产品推荐

