Number的toString()方法可以根据参数进行进制转换,如果不加参数,那么将基于十进制转换。转换的数字带有小数也可以转换,但是不推荐小数进制转换,因为小数进制转换容易因为精度问题造成0.3 - 0.2 != 0.2 - 0.1。
进制转换原理:
1. 十进制转二进制:将十进制的数不断除以2取余直到商为0,例如23
23/2=11~1
11/2=5~1
5/2=2~1
2/2=1~0
1/2=0~1
所以23转为二进制数为10111;
2. 十进制小数转二进制:将小数乘以2然后取整,直到小数部分为0。
例如0.25
0.25 * 2 = 0.5~0
0.5 * 2 = 1~1
所以二进制小数是0.01
例如0.75
0.75 * 2 = 1.5~1
0.5 * 2 = 1~1
所以二进制小数是0.11
3. 二进制转为十进制:将二进制的数每位乘以2的当前位数减1次幂,例如10111.1
10111 = 1 * Math.pow(2 , 4) + 0 * Math.pow(2 , 3) + 1 * Math.pow(2 , 2) + 1 * Math.pow(2 , 1) + 1 * Math.pow(2 , 0) + 1 * Math.pow(2, -1)
= 1 * 16 + 0 * 8 + 1 * 4 + 1 * 2 + 1 * 1 + 1 * 0.5
= 23.5
其它进制转换原理等同。