无法将535.5357055664062插入Google Cloud Spanner的JSON字段
Google Cloud Spanner JSON字段浮点数插入错误说明
根因
Google Cloud Spanner的JSON字段解析逻辑遵循RFC 8259的互操作性要求,仅支持最多15位十进制有效数字的浮点数值,超出该精度的浮点数会被判定为非法JSON值,抛出参数错误。而Spanner原生FLOAT64字段没有该限制,因此符合FLOAT64标准的数值不一定能直接存入JSON字段。
报错示例
{ "error": { "code": 400, "message": "Invalid value for bind parameter json: Expected JSON.", "status":"INVALID_ARGUMENT" } }
精度验证规则
- 无效浮点数(16位有效数字,触发报错):
535.5357055664062 - 有效浮点数(15位有效数字):
535.535705566406 - 有效浮点数(总有效数字未超15位):
103.3588679387016812112421411
解决方案
- 对非高精度要求的浮点数值,插入前做四舍五入或截断处理,保留不超过15位有效数字
- 需保留完整原始精度的场景,将浮点数转为字符串类型后存入JSON字段,读取时自行转换回数值
- 仅需要存储单值的场景,直接使用FLOAT64类型字段存储该数值,不受JSON精度规则限制
内容的提问来源于stack exchange,提问作者mayTree
相关产品推荐
相关产品推荐

