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

PHP中如何在JSON内保留带尾部零的数字类型价格字段

解决方案:PHP生成JSON时保留浮点数尾部零的实现方法

问题根本原因

  • number_format()返回值为字符串类型,直接写入数组转JSON会得到字符串类型的price字段
  • PHP原生json_encode()默认会自动舍去浮点数尾部无意义的零,将4750.0这类值格式化为整数4750输出

方法1:使用内置JSON常量(推荐,PHP >= 5.6.6)

PHP 5.6.6版本新增了JSON_PRESERVE_ZERO_FRACTION常量,作用就是保证浮点数在序列化时保留小数部分,哪怕尾部是零。

代码调整

  1. 构造数组时,直接将价格处理为1位小数的浮点数,不要用number_format:
$products[] = array(
    'price' => round((float)$row['price'], 1)
);
  1. 调用json_encode时新增JSON_PRESERVE_ZERO_FRACTION参数:
fwrite($fp, json_encode($products, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRESERVE_ZERO_FRACTION));

输出效果

生成的JSON完全符合预期:

"price": 4750.0

方法2:低版本PHP兼容方案

如果使用的PHP版本低于5.6.6,可以通过字符串替换的方式实现:

  1. 构造数组时用特殊前缀标记需要保留小数的price值:
$products[] = array(
    'price' => '||PRESERVE_FLOAT||' . number_format((float)$row['price'], 1, '.', '')
);
  1. 序列化后做正则替换去掉前缀和引号:
$json = json_encode($products, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$json = preg_replace('/"||PRESERVE_FLOAT||([\d.]+)"/', '$1', $json);
fwrite($fp, $json);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 19:06:04