javaScript浮点数精确运算之加法实现

这篇博客探讨了JavaScript中浮点数加法导致的精度问题,通过提供一种精确加法的实现方法来解决这个问题。作者指出,即使转换加数为double或float类型也无法避免精度损失,并承诺后续会分享减法、乘法和除法的精确运算实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相信使用过js做加减法计算的人都遇到过这样的问题,那就是0.85+0.1+0.05!=1的情况,这里及存在一个精度的问题,但是不管你是将各加数转为double 还是float类型都没有用,具体js里面的加法原理没有深究,但是我们可以使用如下方式做到精确加法,代码如下,供所有遇到同等问题的人参考。

/**
	 * js加法
	 * */
	var addFunc = function(arg1, arg2) {
	    var r1, r2, m, c;
	    try {
	        r1 = arg1.toString().split(".")[1].length;
	    }
	    catch (e) {
	        r1 = 0;
	    }
	    try {
	        r2 = arg2.toString().split(".")[1].length;
	    }
	    catch (e) {
	        r2 = 0;
	    }
	    c = Math.abs(r1 - r2);
	    m = Math.pow(10, Math.max(r1, r2));
	    if (c > 0) {
	        var cm = Math.pow(10, c);
	        if (r1 > r2) {
	            arg1 = Number(arg1.toString().replace(".", ""));
	            arg2 = Number(arg2.toString().replace(".", "")) * cm;
	        } else {
	            arg1 = Number(arg1.toString().replace(".", "")) * cm;
	            arg2 = Number(arg2.toString().replace(".", ""));
	        }
	    } else {
	        arg1 = Number(arg1.toString().rep
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值