小程序四舍五入算法有问题,小数点后两位相乘乘不尽
发布于 6 年前 作者 jyin 286 次浏览 来自 问答

208.5*5.85=*.4999999999

10 回复

就是浮点数的保存你可以去看下数据类型的结构,这是没办法避免的,但是涉及到金钱的情况下,需要准确值,不允许有误差.所以大部分情况下涉及金额的数值都用long型来保存,然后再显示的时候再做小数点的添加!

这不是小程序的问题,包括在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等

回到顶部