js浮点类型精度问题(两个值相加结果不正确)

在JavaScript中,由于浮点数精度问题,直接相加可能导致不准确的结果,例如1.001 + 2.002 = 3.0029999999999997。为解决这个问题,可以使用特定的浮点数加法函数,但即使如此,结果仍然是不精确的。目前推荐的解决方案是对结果使用toFixed(3)方法来保留小数点后三位,确保比较操作的准确性。

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

需求:左边表格相加的值   与   右边表格相加的值相同

1、场景:在js中float数据相加,有的正确有的错误

        1.001+2.002=3.0029999999999997

        原因是js自带的精度问题,

参照网上:

//浮点类型 加法
function floatAdd(arg1, arg2) {
		var r1, r2, m;
		try {
			r1 = arg1.toString().split(".")[1].length//获取小数点的位数
		} catch (e) {
			r1 = 0
		}
		try {
			r2 = arg2.toString().split(".")[1].length
		} catch (e) {
			r2 = 0
		}
		m = Math.pow(10, Math.max(r1, r2));//获取放大倍数
		var arg1M = arg1 * m;
		var arg2M = arg2 * m;
		var argM = arg1M + arg2M;
		var number =  argM / m;
		return number;
	}

这个number结果也是3.0029999999999997

2、目前解决的方法是:

        使用toFixed(3)对结果进行处理保留小数点后三位

         var leftValue = number1.toFixed(3);
         var rightValue = number2.toFixed(3);

        再进行比较操作或其他相关操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值