接口里有个极小的费率 0.0000001,JSON 序列化后是 1e-07。前端用 /^\d+(\.\d+)?$/ 校验,直接提示格式不正确。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,浮点数转字符串时,超过一定位数会自动切到科学计数法,这是语言默认的最短表示。JSON 允许这种写法,很多业务校验正则却不认 e。

「科学计数法输出」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。改完顺手把文档补一句,省得下次自己重新推一遍。

python -c "print(str(0.0000001)); print(format(0.0000001,'f'))"
node -e "console.log(String(1e-7), (1e-7).toFixed(10))"

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

具体做法是,费率这类值用字符串传输 不要用 float;必须用数字时序列化前格式化固定小数位;校验规则先 parse 再判断范围 别只用正则;数据库列用 decimal 定好精度。

最后用这个标准收尾,接口返回 0.00000010 字符串 前端校验通过 页面不再显示 1e-07。

作者 9823189