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

使用jq对JSON中的十进制数值做除法时如何保留计算精度?

问题原因

你的jq命令存在语法逻辑错误,并不是精度丢失导致结果异常:
赋值符号=左右两侧都使用了.entries[]对数组做迭代,会触发jq的迭代器交叉组合逻辑,最终所有entry的timestamp字段都会被覆盖为数组最后一个entry的timestamp除以1000后的结果,和你预期的「每个entry单独处理自身timestamp字段」完全不符。

正确实现方法

通用jq方案

使用map函数对数组内的每个元素单独处理,用/=缩写实现原地修改即可,默认精度就能满足绝大多数场景需求:

jq '.entries |= map(.timestamp /= 1000.0)' data.json

如果需要指定输出的小数保留位数,可额外添加--decimal-digits参数,示例为保留6位小数:

jq --decimal-digits 6 '.entries |= map(.timestamp /= 1000.0)' data.json

高精度场景方案

如果对精度要求极高,要完全规避浮点数运算误差,可以改用Python处理:

python3 -c '
import json
with open("data.json", "r", encoding="utf-8") as f:
    data = json.load(f)
for entry in data["entries"]:
    entry["timestamp"] = entry["timestamp"] / 1000
with open("processed_data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, indent=2)
'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:24:03