JS 之数据类型 Number

1、浮点数值

浮点数值,就是该数值必须包含一个目标小数点,并且小数点后面必须至少有一位小数。

var floatNum1 = 1.1; 
var floatNum2 = 0.1; 
var floatNum3 = .1; // 有效,但不推荐
复制代码

2、浮点数值计算

浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数。例如,0.1 加 0.2
的结果不是 0.3,而是 0.30000000000000004。这个小小的舍入误差会导致无法测试特定的浮点数值。

if (a + b == 0.3){ 
 alert("You got 0.3.");  // 不要做这样的测试!
} 
复制代码

3、数值范围

isFinite() 函数可以判断一个数值是不是在最大值 Number.MAX_VALUE 和最小值 Number.MIN_VALUE 之间,是在这个范围返回 true.

var result = Number.MAX_VALUE + Number.MAX_VALUE; 
alert(isFinite(result)); //false 
复制代码

4、NaN

NaN 与任何值都不相等,包括 NaN 本身。

alert(NaN == NaN); //false 
复制代码

5、isNaN() 函数

这个函数接受一个参数,该参数可以
是任何类型,而函数会帮我们确定这个参数是否“不是数值”。isNaN() 在接收>到一个值之后,会尝试
将这个值转换为数值。某些不是数值的值会直接转换为数值,例如字符串”10″或 >Boolean 值。而任何
不能被转换为数值的值都会导致这个函数返回 true

alert(isNaN(NaN)); //true 
alert(isNaN(10)); //false(10 是一个数值)
alert(isNaN("10")); //false(可以被转换成数值 10)
alert(isNaN("blue")); //true(不能转换成数值)
alert(isNaN(true)); //false(可以被转换成数值 1
复制代码

6、数值转换

Number() 可以用于任何数据类型

  1. 如果是 Boolean 值,true 和 false 将分别被转换为 1 和 0。
  2. 如果是数字值,只是简单的传入和返回。
  3. 如果是 null 值,返回 0。
  4. 如果是 undefined,返回 NaN。
  5. 如果是字符串,遵循下列规则:
  • 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即”1″会变成 1,”123″会变成 123,而”011″会变成 11(注意:前导的零被忽略了);
  • 如果字符串中包含有效的浮点格式,如”1.1″,则将其转换为对应的浮点数值(同样,也会忽略前导零);
  • 如果字符串中包含有效的十六进制格式,例如”0xf”,则将其转换为相同大小的十进制整数值;
  • 如果字符串是空的(不包含任何字符),则将其转换为 0;
  • 如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。
  1. 如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符串值。
var num1 = Number("Hello world!"); //NaN 
var num2 = Number(""); //0 
var num3 = Number("000011"); //11 
var num4 = Number(true); //1 
复制代码

parseInt() 函数

  • 如果第一个字符不是数字字符或者负号,parseInt() 就会返回 NaN;
  • 用 parseInt()转换空字符串会返回 NaN(Number()对空字符返回 0)
  • 如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。例如,”1234blue”会被转换为 1234,为”blue”会被完全忽略。类似地,”22.5″会被转换为 22,因为小数点并不是有效的数字字符。
  • 如果字符串以”0x”开头且后跟数字字符,就会将其当作一个十六进制整数;如果字符串以”0″开头且后跟数字字符,则会将其当作一个八进制数来解析。
var num1 = parseInt("1234blue"); // 1234 
var num2 = parseInt(""); // NaN 
var num3 = parseInt("0xA"); // 10(十六进制数)
var num4 = parseInt(22.5); // 22 
var num5 = parseInt("070"); // 56(八进制数)
var num6 = parseInt("70"); // 70(十进制数)
var num7 = parseInt("0xf"); // 15(十六进制数
复制代码
  • parseInt() 函数可以提供第二个参数:转换时使用的基数(即多少进制)。
var num1 = parseInt("10", 2); //2 (按二进制解析)
var num2 = parseInt("10", 8); //8 (按八进制解析)
var num3 = parseInt("10", 10); //10 (按十进制解析)
var num4 = parseInt("10", 16); //16 (按十六进制解析
复制代码

parseFloat

  • parseFloat()也是从第一个字符(位置 0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止
  • 字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。
  • 除了第一个小数点有效之外,parseFloat()与 parseInt()的第二个区别在于它始终都会忽略前导的零
  • parseFloat()只解析十进制值,因此它没有用第二个参数指定基数的用法
var num1 = parseFloat("1234blue"); //1234 (整数)
var num2 = parseFloat("0xA"); //0 
var num3 = parseFloat("22.5"); //22.5 
var num4 = parseFloat("22.34.5"); //22.34 
var num5 = parseFloat("0908.5"); //908.5 
var num6 = parseFloat("3.125e7"); //31250000
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享