parseInt的原理

595 阅读2分钟

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

计算法则:

 parseInt() 函数可解析一个字符串,并返回一个整数。
 parseInt(string, radix)
 string	:必需。要被解析的字符串。
 radix	:可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,
 则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
 如果该参数小于 2 或   者大于 36 ,则 parseInt() 将返回 NaN

简单说就是如下的进制的转化

二进制数据一般可写为:规律:个位上的数字的次数是0,十位上的数字的次数是1,......,
依次递增,而十分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。

举例来说:

一个参数的时候: 在这里插入图片描述

一个参数的时候根据参数的形式判断是多少进制

parseInt("26");	 //默认的十进制
parseInt("010") //0开头的十进制
parseInt("0x10") //0x开头的十六进制

结果如下: 在这里插入图片描述

parseInt("26");
按照默认的十进制换算的时候:
2*Math.pow(10,1)+6*Math.pow(10,0)

两个参数的时候:

在这里插入图片描述 计算方式如上图:

parseInt("11",4); //5
1*Math.pow(4,1)+1*Math.pow(4,0)  //5

但是当后面的radix的基数小于前面的字符串的单个数值的时候,如下:会忽略掉前面的大于radix的数字以及这个数字后面的所有数字

parseInt("152",4);//1
1*Math.pow(4,0) //1
parseInt("125",4);	//6
1*Math.pow(4,1)+2*Math.pow(4,0) //6

在这里插入图片描述 具体实现代码可以参考以下文章的实现代码,但是“0”,也就是下图此处,0从控制台的输出结果来看应该也是10进制转换。在这里插入图片描述

参考链接

其他的实现方式

1.利于js弱类型语言的方式 "-" 来进行转换 在这里插入图片描述

2.利用ascii码来进行转换

目前只能想到这几个方案,有别的方案的欢迎留言~~~~