题目:
var sum = 0.1+0.7
问题及解答:
1、打印的结果是什么?
结果:0.7999999999999999
2、为什么结果是这样?
前提:
- 小数十进制转换为二进制,就是将小数×2取整数部分,一直循环计算取值,直到小数部分为0
- 判断小数转换为二进制会产生无限循环一般条件:出现重复的,比如0.1的二进制是0.00011001100110011001...这里面就有重复的1001
原因:浮点数在计算机中是以二进制形式存储的,而某些十进制小数在转换为二进制时可能会无限循环,但由于计算机的资源是有限的。所以没办法用二进制精确的表示,只能确定一定的位数,例:单精度(32位),双精度(64位),然后在有限的精度情况下,最大化的接近该小数,但多多少少还是会造成一定的精度缺失
3、怎么做才能等于0.8?
-
// 通过乘法和除法运算 var sum1 = (0.1*10 + 0.7*10) /10
-
sum.toFixed(1)最后结果是字符串,用parseFloat将其转化为浮点数 var sum2 = parseFloat(sum.toFixed(1)) //确保结果为1位,并且遵循四舍五入,0.79999..保留一位小数,就是0.8(括号中为空的话,就是小数点后0位,默认四舍五入到整数) console.log(sum2);