发布于2026-04-02 阅读(0)
扫一扫,手机访问

通过 number_format() 对各浮点字段单独格式化,再序列化为 JSON,可实现每个字段自定义小数位数(如经纬度保留 6–8 位、高度保留 2 位),但需注意结果为字符串类型而非数字。
通过 number_format() 对各浮点字段单独格式化,再序列化为 JSON,可实现每个字段自定义小数位数(如经纬度保留 6–8 位、高度保留 2 位),但需注意结果为字符串类型而非数字。
在 PHP 中,json_encode() 默认会按数值原始精度输出浮点数,且全局配置(如 serialize_precision)无法为不同字段设置差异化精度。若需实现类似 {"latitude": 35.123000, "longitude": 41.123500, "height": 100.00} 的结构,核心思路是:在序列化前,对每个浮点字段调用 number_format() 进行显式格式化。
number_format() 接收三个关键参数:待格式化的数值、小数位数、小数点符号(默认 '.')、千位分隔符(通常为空)。它返回字符串,因此格式化后的值将作为 JSON 字符串字面量输出(带引号),而非数字类型。
✅ 正确示例:
$response->payload->latitude = number_format(rad2deg($latitude), 6, '.', ''); // → "35.123000" $response->payload->longitude = number_format(rad2deg($longitude), 6, '.', ''); // → "41.123500" $response->payload->height = number_format($height, 2, '.', ''); // → "100.00" echo json_encode($response, JSON_PRETTY_PRINT);
⚠️ 重要注意事项:
? 进阶建议:若项目中多处需此类控制,可封装为辅助方法:
function formatFloat(float $value, int $precision): string {
return number_format($value, $precision, '.', '');
}
// 使用
$response->payload->latitude = formatFloat(rad2deg($latitude), 6);
$response->payload->height = formatFloat($height, 2);总结:差异化浮点精度 JSON 输出的本质是「按需字符串化」,而非尝试修改 JSON 编码器行为。number_format() 是简洁、可靠、标准的解决方案,只需明确接受其返回字符串的语义,并在消费端做好类型适配即可。
下一篇:新新漫画网站入口及阅读指南
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8