今天又让浮点数给坑了 翻出一段老代码 里面居然拿 == 直接比两个小数 我盯着屏幕愣了好几秒
说起来0.1+0.2在大部分语言里算出来是0.30000000000000004而不是0.3 这真不是语言有bug 根子上是二进制压根没法精确表示0.1和0.2 转过去就是无限循环小数 跟十进制里1/3写成0.33333…一个道理 位数有限存不下 误差就跟着来了
所以拿==直接比较两个浮点数基本是在埋雷 正经写法是用误差范围判断 abs(a-b)<1e-9 差不多就得了 别跟它较真
笑死还有个更阴的是循环累加 我之前写统计脚本 跑了几万次加法 结果偏出去快一块钱 查半天才反应过来是累积误差 涉及金额这种敏感场景老老实实用整数 以分为单位存 或者上Decimal 别跟浮点死磕
这玩意儿看着不起眼 真踩进去能让你debug到怀疑人生 大伙儿写业务多留个心眼哈