Open zuopf769 opened 1 year ago
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> // 是四舍五入么?为啥2.45进了一位?2.55就没进位 // toFixed先运算再显示,运算和现实都不精确 console.log(2.45.toFixed(1)) // 2.5 console.log(2.55.toFixed(1)) // 2.5 // js中数字的运算是不精确的 // 存储不精确 // 运算不精确?因为存储不精确会导致运算不精确 // 显示不精确 // 为什么大于0.3 console.log(0.1 + 0.2); // 0.30000000000000004 // 存储不精确 // 计算机中的数字是以二进制存储的 console.log(0.2.toString(2)) // 0.001100110011001100110011001100110011001100110011001101 后面肯定还有很多位,应该是舍或者入了 // 0.2的二进制是0011一直重复,但是达到能存储的最大位数后就需要对后面的位数进行舍入(进位或者舍弃后面的二进制位数) // / 0.00110011001100 1100 后面是1就进1后面是0就舍弃后面的 console.log(0.2.toPrecision(20)) // 0.20000000000000001110 0.2后面还有几位 // 0.20000000000000000001 == 0.19999999999999999999 true console.log(0.20000000000000000001.toString(2)) console.log(0.19999999999999999999.toString(2)) console.log(0.20000000000000000001 == 0.19999999999999999999) // true // 运算不精确;运算是二进制运算的 console.log(0.2 + 0.3); // 0.5 0.2不是不精确么?为啥0.2+0.3又精确了 console.log(0.1 + 0.2); // 0.30000000000000004 不精确 console.log(0.5.toString(2)) // 精确 console.log(0.1.toString(2)) // 最后一位进行了入操作 console.log(0.2.toString(2)) // 0.001100110011001100110011001100110011001100110011001101 // 最后一位进行了入操作 0.2存储的稍微大了 console.log(0.3.toString(2)) // 0.010011001100110011001100110011001100110011001100110011 // 0.3 后的舍弃了 0.3存储的稍微小了 // 0.2 + 0.3正好抵消了,一个稍微大了(入),一个稍微小了(舍),一抵消就正好精确了 // 0.3舍 0.2进 所以0.3 - 0.2 只能是小于0.1, 不到0.1 console.log(0.3 - 0.2) // 0.09999999999999998 // 0.2进 0.3舍 所以 0.2 - 0.3 会大于-0.1 console.log(0.2 - 0.3) // -0.09999999999999998 // 并不是所有的数字存储都不精确 console.log(0.25 + 0.125); console.log(0.25.toString(2)) // 精确存储 console.log(0.125.toString(2))// 精确存储 // 显示不精确 var a = 0.2; // 0.2的存储是不精确的 console.log(a); // 为什么a能正常的显示呢 // 显示的时候也是不精确的,显示的时候也做了近似处理 // 那么猥琐0.1+0.2就不做近似处理了呢?因为误差被放大了;二进制计算后已经不知道是0.1+0.2了,只能返回了放大后的结果 console.log(a.toPrecision(100)) // toFixed先运算再显示,运算和现实都不精确 console.log(2.45.toFixed(1)) // 2.5 console.log(2.55.toFixed(1)) // 2.5 // toPrecision表示10机制的多少位表示方法 console.log(2.45.toPrecision(100)) // 2.450000000000000177635683940025046467781066894531250000000000000000000000000000000000000000000000000 console.log(2.55.toPrecision(100)) // 2.549999999999999822364316059974953532218933105468750000000000000000000000000000000000000000000000000 console.log(2.45.toString(2)) // 进 console.log(2.55.toString(2)) // 舍 </script> </body> </html>