NumberFormatter(PERCENT)返回值与测试值视觉一致但不相等求助
解决NumberFormatter格式化字符串与手动字符串不相等的问题
排查空格差异:de_DE区域的NumberFormatter生成的百分号前空格大概率是非-breaking空格(Unicode U+00A0),而非手动输入的普通空格(U+0020)。用十六进制输出对比验证:
var_dump(bin2hex(FormatService::numberToPercent(0.5))); var_dump(bin2hex('50 %'));前者会包含
C2A0(NBSP的十六进制标识),后者是20(普通空格)。统一空格类型后断言:
方案1:直接使用带NBSP的预期字符串(输入时可通过Alt+0160输入NBSP)self::assertEquals("50 %", FormatService::numberToPercent(0.5));方案2:格式化后将NBSP替换为普通空格
$formatted = str_replace("\u{00A0}", " ", FormatService::numberToPercent(0.5)); self::assertEquals('50 %', $formatted);校验NumberFormatter配置:确认环境中
de_DE区域是否正确加载,也可尝试添加格式化参数调整输出格式,比如:$formatter = new NumberFormatter('de_DE', NumberFormatter::PERCENT); $formatter->setTextAttribute(NumberFormatter::PERCENT_SYMBOL, ' %'); // 强制使用普通空格
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

