208.5*5.85=*.4999999999
就是浮点数的保存你可以去看下数据类型的结构,这是没办法避免的,但是涉及到金钱的情况下,需要准确值,不允许有误差.所以大部分情况下涉及金额的数值都用long型来保存,然后再显示的时候再做小数点的添加!
parseFloat((208.5*5.85).toFixed(10))
原理:https://blog.csdn.net/qq_38209578/article/details/86084586
这不是小程序的问题,包括在web端,js的浮点小数相加都会存在这种陷阱。推荐你看看这个 js浮点数陷阱
这个循环我都惊了
浮点数的坑,不是小程序的产物,这个锅不是微信的,是JS的坑!在做PC端和普通H5时,照样会有这问题。
在小程序内,用到浮点数的场景也不少,最多的,应该是商品购买,单价0.9、9.9、19.9等,再乘于奇数,大概率出现楼主说的bug
建议自己在JS中四舍五入一下~
如果调用小程序的支付API,用户反馈一直支付失败,很可能是这个bug引起。支付的API会校验前端传入的价格,与服务端生成订单时的价格是否一致,不一致的话,肯定支付失败。
这个问题是底层锅
绝大部分语言都有此类问题,有些语言有专门处理的类型或者类
可以和微信学 把单位从元改为分,小数一律不保留
解决问题就方便了
额,之前我做支付的时候都是每次算完都自己四舍五入一下的~~事实上,浮点数精确度问题,好多种语言都会有这问题的喔
就像0.1+0.2!=0.3一样的问题,是js的浮点数精确度问题。
不光JS一门语言,凡是采用IEEE 754标准定义表示数字的编程语言都有这个问题,只是其他语言有内部处理机制。深层次原因可以参考http://0.30000000000000004.com/
建议取整来计算,比如 *10 *100 *1000等