### js运算0.1+0.2的值
在项目开发的时候,常常会进行基本的运算,而前端运算很多时候是很难避免的需求,
可是,我们都知道,由于一些精度问题,前端往往不能进行那么完美的运算,例如
```
0.1+0.2
0.30000000000000004
```
当我们输入0.1+0.2这个全世界都知道答案的简单问题的时候,会得到一个我们吃惊的结果,
那么是什么原因促成这个结果呢?
1. 对于计算机而言,两个数字在相加时是以二进制形式进行的,在呈现结果时才转换成十进制。
2. Java提供的有效数字最长为53个二进制位(64位浮点的后52位+被省略的1位)。
3. 十进制小数转换为二进制小数:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零。
4. 像十进制数有4舍5入的规则一样,二进制也存在类似的规则,简单的说,
* 如果 1.101 要保留一位小数,可能的值是 1.1 和 1.2,那么先看 1.101 和 1.1 或者 1.2 哪个值更
接近,毫无疑问是 1.1,于是答案是 1.1。
* 如果要保留两位小数呢?很显然要么是 1.10 要么是 1.11,而且又一样近,这时就要看这两个数哪个是偶数(末位是偶数),保留偶数为答案。
由于计算机存储方式是以二进制的方式进行存储的,并且有53位有效值的限制,所以当进行二进制转换的时候,当转换的进制数大与53位的时候,会进行类似四舍五入的转换,然后进行加减运算。然后再转换成十进制展示出来。所以这个时候才会有一些精度(数据)的偏差。
### vue监听和赋值顺序
在vue项目中,当某个数值进行watch监听了,然后改变他的值的时候,那么vue的执行顺序会是怎么样的呢?
如下图代码所示:
```
watch:{
userName(newVal){
console.log('watch监听到改变');
}
},
created() {
console.log('初始执行');
this.userName = '123';
console.log('created接着往下');
this.jtName();
},
methods:{
jtName(){
console.log('监听方法执行');
},
}
执行结果为:
初始执行
created接着往下
监听方法执行
watch监听到改变
```
面试实战问题解答(4)
最新推荐文章于 2024-01-18 20:27:15 发布