ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 题目 #### 解释一下在js里,0.1+0.2为什么等于0.30000000000000004,如何通过代码解决这个问题? * 不仅 JavaScript,所有遵循 IEEE 754 规范的语言都是如此; * 在JavaScript中,所有的Number都是以64-bit的双精度浮点数存储的; * 双精度的浮点数在这64位上划分为3段,而这3段也就确定了一个浮点数的值,64bit的划分是“1-11-52”的模式,具体来说: * 1.就是1位最高位(最左边那一位)表示符号位,0表示正,1表示负; * 2.11位表示指数部分; * 3.52位表示尾数部分,也就是有效域部分 ![](https://img.kancloud.cn/2a/b4/2ab4c6651eaca8fc5144a3ecf372a165_627x369.png) ## 解决方案: * [bignumber](https://github.com/MikeMcl/bignumber.js) * [BigInt: JavaScript 中的任意精度整数(新提案)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) ~~~ //将浮点数转换为整数来进行计算 function getMax() { var args = Array.prototype.slice.call(arguments, 0); return Math.max.apply(null, args.map(item => { var arr = item.toString().split('.'); return arr.length > 1 ? arr[1].length : 0; })); } function add() { var args = Array.prototype.slice.call(arguments, 0); var max = getMax.apply(null, args); return args.reduce((sum, cur) => sum + cur * max * 10, 0) / 10 * max; } console.log(add(0.1, 0.2)); ~~~ ## 题目来源 1.[# 0.1+0.2为什么等于0.30000000000000004](https://github.com/airuikun/Weekly-FE-Interview/issues/27)