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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:10:55