声明定义
new Number(num)
* 通过 .valueOf() 获取数字类型的原始值
**_desc_**
对象创建数字类型_**params**_
{ number } num_**return**_
{ object }
var num = new Number(100);
console.log(num); // Number {100}
console.log(num.valueOf()); // 100
字面量
👍
_**return**_
{ number }
var num = 100;
console.log(num); // 100
NaN
not a number 一种特殊的数字类型
* 任意 NaN 的值都是不相同的
* 判断变量是否是 NaN 不能使用 ==/===,应使用 Number.isNaN 或者 Object.is 进行判断
进制
十进制
var num = 100;
console.log(num); // 100
二进制
* 以 **0b**
开头的数字
var num = 0b111;
console.log(num); // 7
八进制
* 以 **0o**
开头的数字
var num = 0o100;
console.log(num); // 64
十六进制
* 以 **0x**
开头的数字
var num = 0xFFF;
console.log(num); // 4095
浮点数溢出
Javascript 中浮点数运算可能会导致溢出
num.toFixed(length)
* 对溢出的浮点数进行小数位截取操作
* 截取时值会进行四舍五入运算
**_desc_**
截取小数位_**params**_
{ number } num_**params**_
{ number } length 保留的小数的位数_**return**_
{ number }
var num1 = 11.1;
var num2 = 13.2;
var sum = num1 + num2;
console.log(sum); // 24.299999999999997
console.log(sum.toFixed(2)); // 24.30
转换为整数,计算后再转换为小数
👍
var num1 = 11.1;
var num2 = 13.2;
var sum1 = num1 + num2;
var sum2 = (num1 * 10 + num2 * 10) / 10;
console.log(sum1); // 24.299999999999997
console.log(sum2); // 24.3
使用第三库计算
math.js、decimal.js等
类型转换
Number(value)
* 不推荐使用。返回值存在多种情况,不可控
* 转换后,不会自动取整
_**params**_
{ any } value_**return**_
{ number }
转换前 | 转换后 |
---|---|
数字、纯数字字符串 | Number |
空数组 []、false、null | 0 |
true | 1 |
其他类型 | NaN |
var num = 100;
var str1 = "99";
var str2 = "99x";
var arr1 = [];
var arr2 = [1, 2, 3];
var bool1 = true;
var bool2 = false;
var obj1 = {};
var obj2 = { name: "zhangsan" };
console.log(Number(num)); // 100
console.log(Number(str1)); // 99
console.log(Number(str2)); // NaN
console.log(Number(arr1)); // 0
console.log(Number(arr2)); // NaN
console.log(Number(bool1)); // 1
console.log(Number(bool2)); // 0
console.log(Number(obj1)); // NaN
console.log(Number(obj2)); // NaN
+value
了解,不常用
* 和 Number() 完全一致
_**params**_
{ any } value_**return**_
{ number }
var num = 100;
var str1 = "99";
var str2 = "99x";
var arr1 = [];
var arr2 = [1, 2, 3];
var bool1 = true;
var bool2 = false;
var obj1 = {};
var obj2 = { name: "zhangsan" };
console.log(+num); // 100
console.log(+str1); // 99
console.log(+str2); // NaN
console.log(+arr1); // 0
console.log(+arr2); // NaN
console.log(+bool1); // 1
console.log(+bool2); // 0
console.log(+obj1); // NaN
console.log(+obj2); // NaN
parseInt(value)
* 转换后,会自动取整(向下取整)
* 转换以数字开头的字符串时,首个非数字字符及其后方的字符会被截取并忽略
**_desc_**
转换为数字整型_**params**_
{ any } value_**return**_
{ number }
转换前 | 转换后 |
---|---|
数字、数字开头的字符串 | Number |
非空数组 | 1 |
其他类型 | NaN |
var num = 100;
var str1 = "99";
var str2 = "99xx100";
var str3 = "x99";
var arr1 = [];
var arr2 = [1, 2, 3];
var bool1 = true;
var bool2 = false;
var obj1 = {};
var obj2 = { name: "zhangsan" };
console.log(parseInt(num)); // 100
console.log(parseInt(str1)); // 99
console.log(parseInt(str2)); // 99
console.log(parseInt(str3)); // NaN
console.log(parseInt(arr1)); // NaN
console.log(parseInt(arr2)); // 1
console.log(parseInt(bool1)); // NaN
console.log(parseInt(bool2)); // NaN
console.log(parseInt(obj1)); // NaN
console.log(parseInt(obj2)); // NaN
parseFloat(value)
* 转换后,不会自动取整
**_desc_**
转换为数字浮点型_**params**_
{ any } value_**return**_
{ number }
转换前 | 转换后 |
---|---|
数字、数字开头的字符串 | Number |
非空数组 | 1 |
其他类型 | NaN |
var num = 100;
var str1 = "99";
var str2 = "99xx100";
var str3 = "x99";
var arr1 = [];
var arr2 = [1, 2, 3];
var bool1 = true;
var bool2 = false;
var obj1 = {};
var obj2 = { name: "zhangsan" };
console.log(parseFloat(num)); // 100
console.log(parseInt(str1)); // 99
console.log(parseInt(str2)); // 99
console.log(parseInt(str3)); // NaN
console.log(parseInt(arr1)); // NaN
console.log(parseInt(arr2)); // 1
console.log(parseInt(bool1)); // NaN
console.log(parseInt(bool2)); // NaN
console.log(parseInt(obj1)); // NaN
console.log(parseInt(obj2)); // NaN
类型检测
Number.isInteger(value)
**_desc_**
检测是否是整数_**params**_
{ any } value_**return**_
{ boolean }
var num1 = 100;
var num2 = 99.99;
var str = "123";
console.log(Number.isInteger(num1)); // true
console.log(Number.isInteger(num2)); // false
console.log(Number.isInteger(str)); // false
Number.isSafeInteger(value)
了解,不常用
* 安全整数:
* 可以准确的表示为一个 IEEE-754 双精度数字
* 其 IEEE-754 表示不能是舍入任何其他整数以适应 IEEE-754 表示的结果
**_desc_**
检测是否是安全整数_**params**_
{ any } value_**return**_
{ boolean }
Number.isFinite(value)
**_desc_**
检测是否是有穷数_**params**_
{ any } value_**return**_
{ boolean }
var num1 = 100;
var num2 = 100 / 0;
console.log(Number.isFinite(num1)); // true
console.log(Number.isFinite(num2)); // false
Number.isNaN(value)
**_desc_**
检测是否是 NaN_**params**_
{ any } value_**return**_
{ boolean }
var num1 = 100;
var num2 = NaN;
console.log(Number.isNaN(num1)); // false
console.log(Number.isNaN(num2)); // true