Java教程

Javascript 浮点数

本文主要是介绍Javascript 浮点数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在复习归并排序的时候,使用到了递归,我一直以为是递归函数没写对,导致了Maximum call stack size exceeded 栈溢出,但是其实是JavaScript浮点数的自动转换的问题!

function sort(arry,left,right){
   if(left === right){
      return;
   }
   let mid=left+(right-left)/2;
   sort(arry,left,mid);
   sort(arry,mid+1,right);
   merge(arry,left,mid,right)
}

let mid=left+(right-left)/2;
mid可能是小数,也可能是整数。
出现这个错误的原因,是自己没有理解JavaScript语言底层!因为刚刚写了java版,直接想当然的以为是int,自动舍去小数!

笔记

JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。

1===1.0 //true!!

JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。容易造成混淆的是,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算。

位运算

位运算符直接处理每一个比特位(bit),所以是非常底层的运算,好处是速度极快,缺点是很不直观,许多场合不能使用它们,否则会使代码难以理解和查错。

有一点需要特别注意,位运算符只对整数起作用,如果一个运算子不是整数,会自动转为整数后再执行。另外,虽然在 JavaScript 内部,数值都是以64位浮点数的形式储存,但是做位运算的时候,是以32位带符号的整数进行运算的,并且返回值也是一个32位带符号的整数

(未完待续)

这篇关于Javascript 浮点数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!