为什么 parseInt(0.0000008) === 8?

本文探讨了JavaScript中浮点数比较的不精确性,展示了常见错误示例,并深入解析了parseInt函数的工作原理,包括如何处理不同基数的数字转换。

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

常见浮点数比较

console.log((0.1 + 0.2) == 0.3);  // false
console.log((0.1 + 0.2) === 0.3); // false
console.log(0.1 + 0.2); // 0.30000000000000004

parseInt 接受两个参数,第一个参数是要转换的字符串(忽略空白);第二个参数是基数。

parseInt('   12', 10);  // 12
parseInt('12**', 10);   // 12
parseInt('12.34', 10);  // 12
parseInt(12.34, 10);    // 12

例子:

parseInt(1000000000000000000000.5, 10); // 1

parseInt 的第一个类型是字符串,所以会将传入的参数转换成字符串,也就是 String(1000000000000000000000.5) 的结果为 '1e+21'parseInt 并没有将 'e' 视为一个数字,所以在转换到 1 后就停止了

String(0.000008);  // '0.000008'
String(0.0000008); // '8e-7'

悲剧:

parseInt(1/0, 19);      // 18
parseInt(false, 16);    // 250
parseInt(parseInt, 16); // 15
parseInt("0x10");       // 16
parseInt("10", 2);      // 2

 

转载于:https://www.cnblogs.com/coldfrost/p/8060113.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值