德文页面上的 1234.5 被显示成 1.234,5 这种带逗号的样子,前台表单回填时又被当成另一个数字,一笔订单直接少算两千多。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,格式化函数会按当前地区取分隔符,但传进去的值本身已经是带固定格式的字符串,再被本地化一次就错位,数字必须在入库前就是纯数值。

碰到「number_format_i18n」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

echo number_format_i18n(1234.5, 1);
# 德语下输出 1.234,5
echo number_format(1234.5, 2, '.', '');

权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

具体做法是,确认传进去的是数值 而不是已经格式化过的字符串;本地化函数只负责页面展示 不要让它参与表单回填;需要回填的时候直接取数据库里的原始数值字段。

最后用这个标准收尾,德语页面的价格显示符合当地的书写习惯 回填金额不再缩水。

作者 9823189