我今天遇到了一些代码:
console.log(Math.ceil(3.000000000000001))
--> 4
console.log(Math.ceil(3.0000000000000001))
--> 3
JS解释器发生了什么?遵循什么规则,以便1得到"修剪"在第二个Math.ceil
?
我不想要的是一系列浮点运算的链接......但具体是由JS解释的。
答案 0 :(得分:3)
Javascript浮点数具有51位尾数,允许16位十进制数字的精度。 3.000000000000001
有16位数字,因此分数可以包含在浮点值中,然后Math.ceil()
将其四舍五入到4
。 3.0000000000000001
有17个数字,因此该分数不适合,并且在阅读时会四舍五入到3.0
,因此Math.ceil()
会返回3.0
。