知晓程序员,专注微信小程序开发的程序员!
前言:客服收到报名工具小程序用户反馈:创建报名时,输入19.9元,但是,保存的是19.89元。很明显,这是前端的一个坑,JS浮点数的坑。
连胜老师之前做过浮点数支付、提款、退款的处理,会把默认单位“元”转成“分”,然后传给服务端,代码如下:
fee = parseInt(this.data.fee * 100)); // "19.9"会触发这个bug
就是这行代码有坑,并且必现,先看下面的截图:
“19.9”真是个神奇的字符串,按上面的写法,parseInt("19.9"*100) = 1989是必现,尝试换成其他数字就正常。
其实是因为JS是弱数据类型,"19.9"*100之前,先做了个隐式转换,字符串“19.9”先转成了Number类型,然后再进行计算,如下:
从上面截图可发现,误差为0.0000000002,这个值小于0.1,所以,就可以用Math.round舍五入一下:
如果你有更好的方式,欢迎给连胜老师留言~