一文掌握JavaScript数字类型
本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了关于数字类型的相关内容,JavaScript中存在两种表示数字的类型:Number和BigInt类型,下面一起来看一下,希望对大家有帮助。
【相关推荐:javascript视频教程、web前端】
JavaScript
中存在两种表示数字的类型:
Number
类型,也就是常规意义上的数字类型,以64
位的IEEE-754
格式存储,属于“双精度浮点数”,截至目前,我们接触到的数字全部都是Number
类型;BigInt
类型,表示任意长度的整数,通常情况下我们用不到它们,除非表示 253 至 -253之外的数字,此类专业数据类型我们会在后面的章节详细介绍;
数字的写法
数字的写法本身很简单,但是JavaScrpt
有很多方便快捷的语法糖供我们使用,好好学习这些语法糖不仅能够提高我们的代码阅读能力,同时可以提高我们代码的高级感(逼格)。
分隔符
十进制的数字最简单了,几乎每篇文章我们都多多少少会使用,例如我们创建一个变量,并存储100
亿:
let tenbillion = 10000000000;
虽然操作起来非常简单,但是存在一个问题:很难数清楚1
后面到底有几个0
,如果我们写的是转账代码,错个0
可能会倾家荡产。
此时,我们可以使用_
作为分隔符,如下:
let tenbillion = 10_000_000_000;
上述代码就可以非常明白的数清0
的个数,显然是最优解!
这里的下划线_
就是JavaScript
的一个语法糖,在执行过程中会被引擎忽略,以上两种写法效果完全相同,但是阅读体验相差很大。
清奇脑回路
有些童鞋就要问了,我从小都是4
个0
一组的,为啥非要3
个0
分一组呢?所以,我们可以写成下面的方式,同样没有问题:
let tenbillion = 100_0000_0000;
亦或者写成这样:
let tenbillion = 1_0000_0000_00;
这里我想表达的是,不论你采用哪种分割方式,都是不影响数字本身的大小的,快想一个逼格最高的方式吧!
省略的0
虽然使用_
可以优雅的分割很多0
,但是在实际生活中,我们一般不这么写,例如我们常常将10000000000
写成“100亿”,这样就可以省略很多0
,从而降低犯错的可能性。
JavaScript
同样提供了一种省略0
的写法,我们可以使用字母e
后面跟个数字表示0
的个数,举个栗子:
let tenbillion = 1e10;//100亿,1后面10个0console.log(3.14e9);//3140000000,后面7个0,此处疑惑可往下看
上述代码的理解非常简单,e10
可以理解为1_0000_0000_00
,也就是1
后面10
个0
,所以我们可以认为:
1e10 === 1 * 1_0000_0000_00;//e10表示1后面10个03.14e9 === 3.14 * 1_000_000_000;//e9表示1后面9个0
我们还可以使用这种方法表示非常小的数字,例如1
纳米:
let nm = 0.000000001;//单位(米)
由于0
的个数过多,我们也可以使用_
分割:
let nm = 0.000_000_001;
当然,还可以使用e
的方式省略掉所有的0
,如下:
let nm = 1e-9;//1的左边9个0,包括小数点前面的那个
换句话说,e-9
的意思就是1-9,也就是1/1000_000_000
,所以下面的等式是成立的:
1e-9 === 1 / 1_000_000_000;3.14e-8 === 3.14 / 1_000_000_00;
十六、八、二进制
十六进制是编程中常用到的格式,例如表示颜色、编码等,我们可以在普通数字前加0x
表示十六进制数字:
let hex = 0xff;//255,不区分大小写,0xFF是一样的
二进制数字使用0b
开头:
let bin = 0b1011;//11
八进制数字使用0o
开头:
let oct = 0o777;//511
这种简便的写法只支持这三种特殊类型,至于其他进制的数字可以使用特殊的函数生成(parseInt
)。
toString(base)
toString
方法可以把数字转为对应进制base
的字符串形式。
举个栗子:
let num = 996; console.log(num.toString(8));//转为8进制字符串 console.log(num.toString(16));//转为16进制字符串 console.log(num.toString(32));//转为32进制字符串
代码执行结果如下:
base
的范围可以从2
到36
,如果不填默认为10
。
注意,如果使用数字直接调用toString
方法,在有些情况下需要是应用两个.
,举例如下:
console.log(123.toString(8));//Error,语法错误console.log(123..toString(8));//正确,173
数字后面有两个.
,这是因为在JavaScript
中数字后面的第一个.
被认为是小数点,第二个点才是调用函数的.
。
如果是小数就不存在这个问题,举个栗子:
console.log(3.14.toString(8));
亦或者,我们使用小括号可以避免使用两个点,举个栗子:
console.log((123).toString(8));//'173
舍入
舍入是数字最常用的操作之一,通常包括:
向下取整,
Math.floor(num)
console.log(Math.floor(3.14));//3 console.log(Math.floor(9.99));//9 console.log(Math.floor(-3.14));//-4 console.log(Math.floor(-9.99));//-10
不遵循四舍五入原则,直接取小于等于当前数值的最近整数。
向上取整,
Math.ceil(num)
console.log(Math.ceil(3.14));//4 console.log(Math.ceil(9.99));//10 console.log(Math.ceil(-3.14));//-3 console.log(Math.ceil(-9.99));//-9
不遵循四舍五入原则,直接取大于等于当前数字的最近整数。
就近取整,
Math.round(num)
console.log(Math.round(3.14));//3 console.log(Math.round(9.99));//10 console.log(Math.round(-3.14));//-3 console.log(Math.round(-9.99));//-10
遵循四舍五入原则,取距离当前数字最近的整数。
移除小数,
Math.trunc(num)
console.log(Math.trunc(3.14));//3 console.log(Math.trunc(9.99));//9 console.log(Math.trunc(-3.14));//-3 console.log(Math.trunc(-9.99));//-9
直接移除小数点后面的数字,取整数位。IE浏览器不支持这个方法
对比以上四种方法:
精度
上述方法只是简单的把小数舍入成了整数,在有些情况下,我们需要特定精度的小数,例如取圆周率后4
位应该怎么办呢?
有两种方法:
数学乘除计数
let pi = 3.1415926;console.log(Math.round(pi * 10000) / 10000);//3.1416
上述代码先将
pi
乘以10000
,然后取整,再除以10000
,从而得到了符合精度要求的结果。但是,这么做看起啦呆呆的,JavaScript
为我们提供了更简单的方法。toFixed(n)
let pi = 3.1415926;console.log(pi.toFixed(4));//3.1416