foreverwaiting
万人非你X

引言:leetcode的一道题

 

 

仔细想想,使用parseInt()做最为简便

 

 

 

函数定义:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt

  parseInt(stringradix)   将一个字符串 string 转换为 radix 进制的整数, radix 为介于2-36之间的数。

参数:
  string【要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用  ToString 抽象操作)。字符串开头的空白符将会被忽略。】
  radix 可选【从 2 到 36,代表该进位系统的数字。例如说指定 10 就等于指定十进位。请注意,通常预设值是 10 进位!】
返回值:
  从给定的字符串中解析出的一个整数 或 NaN
🌰特栗:当radix 小于 2 或大于 36  或  第一个非空格字符不能转换为数字

 

 

重点:当参数 radix 不传时该函数的具体行为

 

如果 radix 是 undefined0未指定的,JavaScript会假定以下情况:

 

  1. 如果输入的 string以 "0x"或 "0x"(一个0,后面是小写或大写的X)开头,那么radix被假定为16,字符串的其余部分被解析为十六进制数。
  2. 如果输入的 string以 "0"(0)开头, radix假定为8(八进制)或10(十进制)。具体选择哪一个radix取决于实现。ECMAScript 5 澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用 parseInt 时,一定要指定一个 radix
  3. 如果输入的 string 以任何其他值开头, radix 是 10 (十进制)
  4. 对非常大或非常小的数字使用数字时,使用 parseInt 截断数字将产生意外结果。 parseInt不应替代Math.floor()。如下意外
    parseInt(4.7, 10);
    parseInt(4.7 * 1e22, 10); // 非常大的数值变成 4
    parseInt(0.00000000000434, 10); // 非常小的数值变成 4

 

 所以那道leetcode答案为:

var myAtoi = function(str) {
    let num = parseInt(str, 10); // 故,此处必须传10
    if(isNaN(num)) return 0;
    if(num < Math.pow(-2,31)) return Math.pow(-2,31); 
    if(num > Math.pow(2,31) - 1) return Math.pow(2,31) - 1;
    return num;
};

 

 

 

posted on 2020-04-25 22:09  foreverwaiting  阅读(419)  评论(0编辑  收藏  举报