6. JS'骚'操作之0.1 + 0.2 !== 0.3
- 十进制转换为二进制的计算 [val].toString(2) // 参数是进制 范围 2~36
- JS使用number类型表示数字(整数和浮点数),遵循IEEE-754 标准 通过64位二进制值来表示一个数字
https://babbage.cs.qc.cuny.eduIEEE-754.old/Decimal.html
- 第0位:符号位,0表示正数,1表示负数 S
第1位到第11位「11位指数」:储存指数部分 E
第12位到第63位「52位尾数」:储存小数部分(即有效数字)F
注:尾数部分在规约形式下第一位默认为1(省略不写)
- 最大安全数字「16位」 Number.MAX_SAFE_INTEGER === Math.pow(2,53)-1
- 怎么解决精度问题?
- 将数字转成整数【扩大系数】
- 第三方库:Math.js、 decimal.js、 big.js
面试题:自己编写程序,把十进制的'整数'转换为二进制
const decimal2binary = function decimal2binary(decimal){
let binary = [],
negative = decimal < 0,
integer;
decimal = Math.abs(decimal)
integer = Math.floor(decimal / 2)
binary.unshift(decimal % 2)
while(integer){
binary.unshift(decimal % 2)
integer = Math.floor(decimal / 2)
}
return `${negative?'-':''}${binary.join('')}`
}
const coefficient = function coefficient(num){
num = num + ''
let [, char = ''] = num.split('.'),
len = char.length;
return Math.pow(10, len)
}
const plus = function plus(num1, num2){
num1 = +num1
num2 = +num2
if(isNaN(num1) || isNaN(num2)) return NaN
let coeffic = Math.max(coefficient(num1),coefficient(num2))
return (num1 * coeffic + num2 * coeffic) / coeffic
}
7. 手摸手图解函数底层运行机制
var x = [12, 23];
function fn(y) {
y[0] = 100;
y = [100];
y[1] = 200;
console.log(y);
}
fn(x);
console.log(x);

如果觉得还可以,麻烦XDM点个赞,点击下面的进入专栏可以看到其他的文章!!!!