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

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不精准问题的解决办法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值