微信支付-退款手续费问题排查

微信退款手续费规则:

应退还手续费金额 = ROUND((本次退款实际有效退款金额/(已结算金额-已结算已退款金额))*(已收取手续费-已退款手续费))

ROUND(x)使用银行家算法进行舍入到分。

我们测试过程中使用了如下的测试用例:

结算金额为8.50元,共分10笔进行退款,每笔为0.85元。


我们发现在第5笔和第6笔产生了差异

之后我们对公式内的数据分段进行计算,发现了一个可疑点。

第5笔计算出来的数据不是0.005,而是比0.005略大产生了精度问题

之后开始怀疑计算机的浮点存储方式导致精度问题。

方式一

double tmp = 0.05/3*3;

tmp为0.05。

方式二

double tmp1 = 0.05/3;

double tmp2 = tmp1*3;

tmp2为0.05。

本来我以为方式二会产生精度的问题,但是并没有能复现问题。至此问题排查陷入了僵局。

最终微信方面反馈,确实是精度问题。问题也定位在了一样的位置,因为开发同学多进行了一步ROUND运算。

原公式:

ROUND((本次退款实际有效退款金额/(已结算金额-已结算已退款金额))*(已收取手续费-已退款手续费))

开发同学实现的公式:

ROUND(ROUND(本次退款实际有效退款金额/(已结算金额-已结算已退款金额))*(已收取手续费-已退款手续费))

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容