前阵子接手一个老接口,用户ID是一串长长的数字,十九位。我顺手当数字存、当key用、拼进请求参数,逻辑写得那叫一个溜。结果线上开始冒鬼:同一个用户,偶尔被识别成另一个人,订单张冠李戴。
查了一晚上,根因离谱到想笑。JavaScript的Number是双精度浮点,能精确容纳的整数只到2的53次方减一。再往上,它开始偷偷"四舍五入",末几位直接改写,你还没处说理。
说真的,这种坑最气人的不是难,是它平时人畜无害,数字一旦够长就翻脸。现在我见到长ID,第一反应就是确认它到底是字符串还是数字,宁可啰嗦,不敢再信。
你见过更隐蔽的精度陷阱吗?