小程序
小游戏
企业微信
微信支付
扫描小程序码分享
208.5*5.85=*.4999999999
12 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
浮点数的坑,不是小程序的产物,这个锅不是微信的,是JS的坑!在做PC端和普通H5时,照样会有这问题。
在小程序内,用到浮点数的场景也不少,最多的,应该是商品购买,单价0.9、9.9、19.9等,再乘于奇数,大概率出现楼主说的bug
建议自己在JS中四舍五入一下~
如果调用小程序的支付API,用户反馈一直支付失败,很可能是这个bug引起。支付的API会校验前端传入的价格,与服务端生成订单时的价格是否一致,不一致的话,肯定支付失败。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
我这里有一种计算方式能解决正在全面测试
for(let i=80;i<160;i++){
for (let j = 19900; j <= 20000; j++){
if(j%5==0){
let b = i*5
let a = Math.round((j/ 100 * b).toFixed(2)) / 100 -----》这里是重点
// console.log(a)
// console.log(b)
let data = {
consumePrices: a,
price: b / 100,
amount: j/ 100,
listPirce: b / 100 + 2
}
这不是小程序的问题,包括在web端,js的浮点小数相加都会存在这种陷阱。推荐你看看这个 js浮点数陷阱
parseFloat((208.5*5.85).toFixed(10))
原理:https://blog.csdn.net/qq_38209578/article/details/86084586
不光JS一门语言,凡是采用IEEE 754标准定义表示数字的编程语言都有这个问题,只是其他语言有内部处理机制。深层次原因可以参考http://0.30000000000000004.com/
这个循环我都惊了
业务代码测试·····
这个问题是底层锅
绝大部分语言都有此类问题,有些语言有专门处理的类型或者类
可以和微信学 把单位从元改为分,小数一律不保留
解决问题就方便了
我们就是要保留两位小数大哥
就是浮点数的保存你可以去看下数据类型的结构,这是没办法避免的,但是涉及到金钱的情况下,需要准确值,不允许有误差.所以大部分情况下涉及金额的数值都用long型来保存,然后再显示的时候再做小数点的添加!
就像0.1+0.2!=0.3一样的问题,是js的浮点数精确度问题。
额,之前我做支付的时候都是每次算完都自己四舍五入一下的~~事实上,浮点数精确度问题,好多种语言都会有这问题的喔
是二进制存储计算导致的吧
正在加载...
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
浮点数的坑,不是小程序的产物,这个锅不是微信的,是JS的坑!在做PC端和普通H5时,照样会有这问题。
在小程序内,用到浮点数的场景也不少,最多的,应该是商品购买,单价0.9、9.9、19.9等,再乘于奇数,大概率出现楼主说的bug
建议自己在JS中四舍五入一下~
如果调用小程序的支付API,用户反馈一直支付失败,很可能是这个bug引起。支付的API会校验前端传入的价格,与服务端生成订单时的价格是否一致,不一致的话,肯定支付失败。
我这里有一种计算方式能解决正在全面测试
for(let i=80;i<160;i++){
for (let j = 19900; j <= 20000; j++){
if(j%5==0){
let b = i*5
let a = Math.round((j/ 100 * b).toFixed(2)) / 100 -----》这里是重点
// console.log(a)
// console.log(b)
let data = {
consumePrices: a,
price: b / 100,
amount: j/ 100,
listPirce: b / 100 + 2
}
}
}
}
这不是小程序的问题,包括在web端,js的浮点小数相加都会存在这种陷阱。推荐你看看这个 js浮点数陷阱
parseFloat((208.5*5.85).toFixed(10))
原理:https://blog.csdn.net/qq_38209578/article/details/86084586
不光JS一门语言,凡是采用IEEE 754标准定义表示数字的编程语言都有这个问题,只是其他语言有内部处理机制。深层次原因可以参考http://0.30000000000000004.com/
这个循环我都惊了
业务代码测试·····
这个问题是底层锅
绝大部分语言都有此类问题,有些语言有专门处理的类型或者类
可以和微信学 把单位从元改为分,小数一律不保留
解决问题就方便了
我们就是要保留两位小数大哥
就是浮点数的保存你可以去看下数据类型的结构,这是没办法避免的,但是涉及到金钱的情况下,需要准确值,不允许有误差.所以大部分情况下涉及金额的数值都用long型来保存,然后再显示的时候再做小数点的添加!
就像0.1+0.2!=0.3一样的问题,是js的浮点数精确度问题。
额,之前我做支付的时候都是每次算完都自己四舍五入一下的~~事实上,浮点数精确度问题,好多种语言都会有这问题的喔
是二进制存储计算导致的吧