js中如何判断两个浮点数是否相等

本文探讨了JavaScript中浮点数运算的精度问题,包括0.1+0.2不等于0.3的原因,并提供了两种解决方案:一是通过设定精度阈值进行比较;二是重写toFixed()方法来提高精度。

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

js中Number类型表示数字,采用“IEEE 754 标准定义的双精度64位格式”表示数字,不区分整数值和浮点数值,均采用浮点数值表示,所以在进行数字运算的时候要特别之一进度缺失问题。
经典面试问题
js中0.1+0.2 == 0.3吗?

0.1 + 0.2 = 0.30000000000000004;
0.1 + 0.2 == 0.3; // false

那么如何判断两个浮点数直接相等呢?
1、精度判断法

var delta = 1e-5; // 定义精度精确到0.00001
var a = 0.1;
var b = 0.2;
var sum = 0.3;
// 判断相差小于精度就认为相等
if(a + b - sum < delta) {
    console.log('a + b == sum');
}

2、使用toFixed()方法
toFixed()方法可以把Number四舍五入为指定小数的数字。
语法
NumberObject.toFixed(num); //num代表要保留的小数位数。
但是toFixe存在不精准的问题:

console.log(1.35.toFixed(1)); // 1.4 正确
console.log(1.335.toFixed(2)); // 1.33 错误
console.log(1.3335.toFixed(3)); // 1.333 错误
console.log(1.33335.toFixed(4)); // 1.3334 正确
console.log(1.333335.toFixed(5)); // 1.33333 错误
console.log(1.3333335.toFixede(6)); // 1.333333 错误

解决方法:
重写toFixed()方法:

Number.prototype.toFixed = function (s) {
     var times = Math.pow(10, s);
     //如果是正数,则+0.5,是负数,则-0.5
     const adjust = this >= 0 ? 0.5 : -0.5;
     var des = this * times + adjust;
     des = parseInt(des, 10) / times;
     return des + '';
}
console.log(1.335.toFixed(2)); // 1.34 正确

参考
toFixed不精准问题的解决办法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值