Javascript学习---Number类型

Javascript的所有数字类型都是存储在64位格式的IEEE-754中,也就是双精度。


声明数字类型的方式

当我们要声明一个十亿的数字,通常我们是这样的:
let billion = 1000000000;
但是这样写很麻烦,毕竟要写这么多个零,javascript还提供了另外的一种写法:
let billion = 1e9;  // 1 billion, literally: 1 and 9 zeroes

alert( 7.3e9 );  // 7.3 billions (7,300,000,000)
这里的e表示科学计数法,1e9也就是1*10的9次方,也就是1,000,000,000(十亿)

如果要表示小数的话,可以这样声明:
let ms = 1e-6; // six zeroes to the left from 1
这里的1e-6表示1*10的负六次方,也就是1/1,000,000

二进制、十进制和十六进制表示

二进制数字用0b做为前缀表示,例如:
let a = 0b11111111; // binary form of 255
十进制使用0o做为前缀表示,例如:
let b = 0o377; // octal form of 255
十六进制我们用0x为前缀表示,例如:
alert( 0xff ); // 255
alert( 0xFF ); // 255 (the same, case doesn't matter)

toString(base)实现不同进制之间的转换

使用num.toString(base)方法可以实现不同进制的转换,其中base表示要转换的进制,例如:
let num = 255;

alert( num.toString(16) );  // ff
alert( num.toString(2) );   // 11111111

ps:

如果我们不是以数字类型变量的形式来调用toString()方法,而是直接用数字来调用toString()的话,我们要是用两个点“..”
来调用该方法,例如123456..toString(16)。还有另外一种写法,就是(123456).toString(16),这就只需要一个点。

数字取舍和操作

Javascript提供了一些内置函数来进行数字的取舍和操作,如下:
(1)Math.floor:向下取整。例如3.1--->3,-1.1--->-2
(2)Math.ceil:向上取整。例如3.1--->4,-1.1--->-1
(3)Math.round:四舍五入。例如3.6--->4,-1.3--->-1
(4)Math.trunc(IE不支持):移除小数点后面的数字,例如:3.1--->3,-1.1--->-1

num.toFixed()方法
数字类型有个内置方法toFixed(),用来设置小数点后的位数,它返回的结果是string类型,例如:
let num = 12.34;
alert( num.toFixed(1) ); // "12.3"
toFixed()方法在设置小数点后的位数时会默认对数字进行四舍五入,例如:
let num = 12.36;
alert( num.toFixed(1) ); // "12.4"
如果需要填充时,默认添加0,例如:
let num = 12.34;
alert( num.toFixed(5) ); // "12.34000", added zeroes to make exactly 5 digits

小数精度的丢失

javascript的数字是以 64位格式的IEEE-754存储的,当我们声明的数值超过它的范围时,会给出一个infinity,例如:
alert( 1e500 ); // Infinity
由于计算机是以0和1的形式来存储数字,所以对于一些小数就会出现无法精确存储,导致精度丢失的错误,这在其他语言也是一样的,例如:


alert( 0.1 + 0.2 ); // 0.30000000000000004
对于这种问题,我们有以下两种方式来解决:
(1)使用toFixed()方法
let sum = 0.1 + 0.2;
alert( sum.toFixed(2) ); // 0.30
还有另外一种写法
let sum = 0.1 + 0.2;
alert( +sum.toFixed(2) ); // 0.3
(2)先乘后除
alert( (0.1 * 10 + 0.2 * 10) / 10 ); // 0.3

测试isFinite和isNaN

Inifinite(-Inifinite)是一种特殊的数字类型值,表示大于或者小于任何数;
NaN表示一种错误(error)

(1)isNaN(value)会将参数转换为number类型,然后测试它是否等于NaN,例如:
alert( isNaN(NaN) ); // true
alert( isNaN("str") ); // true
我们不能用===NaN的形式来判断,因为NaN不能等于任何事物,例如:
alert( NaN === NaN ); // false

(2)isFinite(value)会将参数转换为number类型,如果是常规的数字类型则返回true,若是 NaN/Infinity/-Infinity,返回false,例如:

alert( isFinite("15") ); // true
alert( isFinite("str") ); // false, because a special value: NaN
alert( isFinite(Infinity) ); // false, because a special value: Infinity
有时候,isFinite用来验证一个string变量是否为常规的number,例如
let num = +prompt("Enter a number", '');

// will be true unless you enter Infinity, -Infinity or not a number
alert( isFinite(num) );

parseInt and parseFloat

数值类型的转换使用+或者Number(...)是非常严格的,很容易报错,例如:

alert( +"100px" ); // NaN
javascript提供了parseInt()和parseFloat()两个方法来进行更灵活的转换,例如:

alert( parseInt('100px') ); // 100
alert( parseFloat('12.5em') ); // 12.5

alert( parseInt('12.3') ); // 12, only the integer part is returned
alert( parseFloat('12.3.4') ); // 12.3, the second point stops the reading
当然,如果出现无法读取转换的情况,会报错NaN,例如:

alert( parseInt('a123') ); // NaN, the first symbol stops the process
parseInt()支持不同进制的转换,例如:
alert( parseInt('0xff', 16) ); // 255
alert( parseInt('ff', 16) ); // 255, without 0x also works

alert( parseInt('2n9c', 36) ); // 123456

其他的math函数

javascript的Math对象提供了许多的方法给我们使用,例如:
alert( Math.random() ); // 0.1234567894322
alert( Math.random() ); // 0.5435252343232
alert( Math.random() ); // ... (any random numbers)
alert( Math.max(3, 5, -10, 0, 1) ); // 5 
alert( Math.min(1, 2) ); // 1
alert( Math.pow(2, 10) ); // 2 in power 10 = 1024


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值