parseFloat()
parseFloat() 方法可以把一个字符串解析成浮点数。该方法与Number.parseFloat() 函数相同。解析一个参数(必要时先转换为字符串)并返回一个浮点数。返回值:给定值被解析成浮点数。如果给定值不能被转换成数值,则会返回NaN。
1、如果 parseFloat 在解析过程中遇到了正号(+)、负号(- U+002D HYPHEN-MINUS)、数字(0-9)、小数点(.)、或者科学记数法中的指数(e 或 E)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数。
2、第二个小数点的出现也会使解析停止(在这之前的字符都会被解析)。
3、参数首位和末位的空白符会被忽略。
4、如果参数字符串的第一个字符不能被解析成为数字,则 parseFloat 返回 NaN。
5、parseFloat 也可以解析并返回 Infinity。
6、parseFloat解析 BigInt 为 Numbers, 丢失精度。因为末位 n 字符被丢弃。
7、parseFloat 也可以转换一个已经定义了 toString 或者 valueOf 方法的对象,它返回的值和在调用该方法的结果上调用 parseFloat 值相同。
// 下面的例子都返回3.14
parseFloat(3.14);
parseFloat('3.14');
parseFloat(' 3.14 ');
parseFloat('314e-2');
parseFloat('0.0314E+2');
parseFloat('3.14some non-digit characters');
parseFloat({ toString: function() { return "3.14" } });
// 返回NaN
parseFloat("FF2");
// 返回 900719925474099300,当整数太大以至于不能被转换时将失去精度。
parseFloat(900719925474099267n);
parseFloat('900719925474099267n');
parseInt()
parseInt() 方法依据指定基数 [ 参数 radix 的值],把字符串 [ 参数 string 的值] 解析成整数。这个方法和Number.parseInt() 函数具有一样的函数功能。
Number.parseInt === parseInt; // true
语法:parseInt(string, radix)
string:
要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用 ToString 抽象操作)。字符串开头的空白符将会被忽略。
radix:
- 一个介于2和36之间的整数(数学系统的基础),表示上述字符串的基数。比如参数 10 表示使用十进制数值系统。
- 始终指定此参数可以消除阅读该代码时的困惑并且保证转换结果可预测。当未指定基数时,不同的实现会产生不同的结果,通常认为其值默认为10
- 但是如果你的代码运行在过时的浏览器中,那么请在使用时总是显式地指定 radix。
- 在基数为 undefined,或者基数为 0 或者没有指定的情况下,JavaScript 作如下处理:
- 如果字符串 string 以”0x”或者”0X”开头, 则基数是16 (16进制).如果字符串 string 以”0″开头, 基数是8(八进制)或者10(十进制),那么具体是哪个基数由实现环境决定。ECMAScript 5 规定使用10,但是并不是所有的浏览器都遵循这个规定。因此,永远都要明确给出radix参数的值。
- 如果字符串 string 以其它任何值开头,则基数是10 (十进制)。
(1)忽略字符串前面的空格,直至找到第一个非空字符
(2)如果第一个字符不是数字符号或者负号,返回NaN
(3)如果第一个字符是数字,则继续解析直至字符串解析完毕或者遇到一个非数字符号为止
(4)如果上步解析的结果以0开头,则将其当作八进制来解析;如果以0x开头,则将其当作十六进制来解析
(5)如果指定radix参数,则以radix为基数进行解析
返回值:
返回解析后的整数值。 如果被解析参数的第一个字符无法被转化成数值类型,则返回NaN。
一些数中可能包含e字符(例如6.022e23),使用parseInt去截取包含e字符数值部分会造成难以预料的结果。例如:
parseInt("6.022e23", 10); // 返回 6
parseInt(6.022e2, 10); // 返回 602
// 以下例子均返回15:
parseInt("0xF", 16);
parseInt("F", 16);
parseInt("17", 8);
parseInt(021, 8);
parseInt("015", 10); // parseInt(015, 10); 返回 15
parseInt(15.99, 10);
parseInt("15,123", 10);
parseInt("FXX123", 16);
parseInt("1111", 2);
parseInt("15 * 3", 10);
parseInt("15e2", 10);
parseInt("15px", 10);
parseInt("12", 13);
// 以下例子均返回 NaN:
parseInt("Hello", 8); // 根本就不是数值
parseInt("546", 2); // 除了“0、1”外,其它数字都不是有效二进制数字
// 以下例子均返回 -15:
parseInt("-F", 16);
parseInt("-0F", 16);
parseInt("-0XF", 16);
parseInt(-15.1, 10);
parseInt(" -17", 8);
parseInt(" -15", 10);
parseInt("-1111", 2);
parseInt("-15e1", 10);
parseInt("-12", 13);
// 下例中全部返回 4:
parseInt(4.7, 10);
parseInt(4.7 * 1e22, 10); // 非常大的数值变成 4
parseInt(0.00000000000434, 10); // 非常小的数值变成 4
// 下面的例子返回 224
parseInt("0e0",16);
parseInt() // NaN
parseInt('') // NaN