[x]
类型转换:补完函数 convertStringToNumber, convertNumberToString1. 老师提供的参考待补齐版本:
<script>function convertStringToNumber(string, x) {if (arguments.length < 2)x = 10;var chars = string.split('');var number = 0;var i = 0;while (i < chars.length && chars[i] != '.') {number = number * x;number += chars[i].codePointAt(0) - '0'.codePointAt(0);i++;}if (chars[i] === '.') {i++;}var fraction = 1;while (i < chars.length) {fraction = fraction / x;number += (chars[i].codePointAt(0) - '0'.codePointAt(0)) * fraction;i++;}return number;}convertStringToNumber("100");function convertNumberToString(number, x) {var integer = Math.floor(number);var fraction = number - integer;var string = '';while (integer > 0) {string = String(integer % x) + string;integer = Math.floor(integer / x);}return string;}convertNumberToString(100.1, 10);</script>
2. 需求分析
2.1 字符串转数值
2.2 数值转字符串功能
对于16进制的情况,取余函数结果大于等于10的时候需要转换成ABCDEF
3. 字符串转数值(含指数部分)
function convertStringToNumber(string){// 判断字符串合法性r1 = /^(0b|0B)(0|1)+$/r2 = /^(0o|0O)[0-7]+$/r3 = /^(0x|0X)[0-9a-fA-F]+$/r4 = /(^(0|([1-9]\d*)).(\d*)?((e|E){1}(\+|\-)?\d+)?$)|(^.\d+((e|E){1}(\+|\-)?\d+)?$)|(^(0|([1-9]\d*))((e|E){1}(\+|\-)?\d+)?$)/if (r1.exec(string) !== null) {return convertS2N(string.slice(2),2)}else if (r2.exec(string) !== null) {return convertS2N(string.slice(2),8)}else if (r3.exec(string) !== null) {return convertS2N(string.slice(2),16)}else if (r4.exec(string) !== null) {// 判断字符串中是否含有指数部分if (string.includes('e')) {// 拆分实数部分和指数部分chars=string.split('e')console.log(chars)num = convertS2N(chars[0])exponent = 1// 判断指数部分符号位if (chars[1][0]==='-') {exponent = -1chars[1] = chars[1].slice(1)}// 指数部分无意义的“+”和前置的0if (chars[1][0]==='+') {chars[1]= chars[1].slice(1)}exponent = exponent * convertS2N(chars[1])num=num*Math.pow(10,exponent)return num}else if (string.includes('E')) {// 拆分实数部分和指数部分chars=string.split('E')console.log(chars)num = convertS2N(chars[0])exponent = 1// 判断指数部分符号位if (chars[1][0]==='-') {exponent = -1chars[1] = chars[1].slice(1)}// 指数部分无意义的“+”和前置的0if (chars[1][0]==='+') {chars[1]= chars[1].slice(1)}exponent = exponent * convertS2N(chars[1])num=num*Math.pow(10,exponent);return num;}else {return convertS2N(string)}}else {return null}}// 老师提供的部分 修改一下名字function convertS2N(string, x) {if (arguments.length < 2)x = 10;var chars = string.split('');var number = 0;var i = 0;while (i < chars.length && chars[i] != '.') {number = number * x;number += chars[i].codePointAt(0) - '0'.codePointAt(0);i++;}if (chars[i] === '.') {i++;}var fraction = 1;while (i < chars.length) {fraction = fraction / x;number += (chars[i].codePointAt(0) - '0'.codePointAt(0)) * fraction;i++;}return number;}// 测试console.log(convertStringToNumber("0B1010"));console.log(convertStringToNumber("0b1110"));console.log(convertStringToNumber("0O1053"));console.log(convertStringToNumber("0o1760"));console.log(convertStringToNumber("0x1ab8"));console.log(convertStringToNumber("0X1AB0"));console.log(convertStringToNumber("132"));console.log(convertStringToNumber("100.123"));console.log(convertStringToNumber(".164"));console.log(convertStringToNumber("132E12"));console.log(convertStringToNumber("100.123e-23"));console.log(convertStringToNumber(".164e+2"));console.log(convertStringToNumber(".164e+02"));console.log(convertStringToNumber(".164e002"));console.log(convertStringToNumber(".164E00000000"));console.log(convertStringToNumber("0xER2312"));
4. 数值转字符串
function convertNumberToString(number, x) {if (arguments.length < 2)x = 10;var integer = Math.floor(number);var fraction = number - integer;var string = '';while (integer > 0) {if (integer % x < 10 ) {string = String(integer % x) + string;}else if (integer % x === 10 ) {string = "A" + string;}else if (integer % x === 11 ) {string = "B" + string;}else if (integer % x === 12 ) {string = "C" + string;}else if (integer % x === 13 ) {string = "D" + string;}else if (integer % x === 14 ) {string = "E" + string;}else if (integer % x === 15 ) {string = "F" + string;}integer = Math.floor(integer / x);}return string;}
