JavaScript 各种进制间的转换 您所在的位置:网站首页 十进制如何转成二进制 JavaScript 各种进制间的转换

JavaScript 各种进制间的转换

2023-11-04 05:53| 来源: 网络整理| 查看: 265

十进制与十六进制的转换

十进制转十六进制

//number.toString(radix); //radix范围2~36,不写就是十进制 var num = 255; console.log(num.toString(16));// 十进制转十六进制 console.log(num.toString(16).toUpperCase());// 十进制转十六进制,再转大写

十六进制转十进制

//parseInt(string, radix) //radix范围2~36,不写就是十进制 var str = "FF"; console.log(parseInt(str, 16));//十六进制转十进制 var str1 = "12"; console.log(parseInt(str1));//字符串转十进制 十进制与二进制的转换

十进制转二进制

var decimalNum = 123; console.log(decimalNum.toString(2)); // "1111011" var decimalFloatNumber = 123.125; console.log(decimalFloatNumber.toString(2)); // "1111011.001" 小数部分也可以直接得到

二进制转十进制

若二进制数只有整数部分,可直接用下列方式进行转换

var str = "1111011"; console.log(parseInt(str, 2)); // "123",二进制转十进制

若二进制数包含小数部分,用上述方法会将小数部分舍弃,因此要将整数部分和小数部分分别进行转换,最后合并为十进制数,方法如下

var binaryFloatNum = 1111011.111; var binaryFloatNumStr = binaryFloatNum.toString(); //先将二进制数转为字符串 console.log(binaryFloatNumStr); // "1111011.111" var binaryFloatNumArr = binaryFloatNumStr.split("."); console.log(binaryFloatNumArr); // ["1111011", "111"] //以小数点为分隔符,获取整数部分和小数部分 var binaryFloatPartStr = binaryFloatNumArr[1]; // "111",binaryFloatPartStr为表示小数部分的字符串 var binaryFloatPartArr = binaryFloatPartStr.split(""); // ["1", "1", "1"],将小数部分的每一位存储在数组中 /** * 将 binaryFloatPartArr 数组中的每项转换为对应的小数部分的十进制数 * @param decimalArray 二进制小数部分中由小数各位组成的数组 */ //遍历小数位数组,每一位乘以2的(-index-1)次幂,得到二进制小数位的十进制表示 function eachBinaryFloatPartToDecimal (binaryFloatPartArr) { return binaryFloatPartArr.map((currentValue, index) => { return Number(currentValue) * Math.pow(2, (-(index + 1))); }) } var eachDecimalFloatPartNum = eachBinaryFloatPartToDecimal(["1", "1", "1"]); console.log(eachDecimalFloatPartNum); // [0.5, 0.25, 0.125] /** * 将 binaryFloatPartArr 数组中的每项转换为对应的小数部分的十进制数 * @param decimalArray 二进制小数部分中由小数各位组成的数组 */ //将eachDecimalFloatPartNum中的每一项进行累加得到decimalFloatPartNum var decimalFloatPartNum = eachDecimalFloatPartNum.reduce((accumulator, currentValue) => {return accumulator + currentValue;}) console.log(decimalFloatPartNum); // 0.875

完整代码

/** * 将二进制小数部分转换为十进制数 * @param binaryFloatPartArr 二进制小数部分中由小数各位组成的数组 */ function eachBinaryFloatPartToDecimal(binaryFloatPartArr) { return binaryFloatPartArr.map((currentValue, index) => { return Number(currentValue) * Math.pow(2, (-(index + 1))) }) } /** * 将二进制小数(包含整数部分和小数部分)转换为十进制数 * @param binaryNum 二进制数(可能是整数,也可能是小数) */ function binaryFloatToDecimal(binaryNum) { // 如果该二进制只有整数部分则直接用 parseInt(string, radix) 处理 if (Number.isInteger(binaryNum)) { return parseInt(binaryNum, 2); } else { var binaryFloatNumArr = binaryNum.toString().split("."); // 将二进制整数部分转换为十进制数 var binaryIntParStr = binaryFloatNumArr[0]; var decimalIntPartNum = parseInt(binaryIntParStr, 2); // 将二进制小数部分转换为十进制数 var binaryFloatPartArr = binaryFloatNumArr[1].split(""); var eachDecimalFloatPartNum = eachBinaryFloatPartToDecimal(binaryFloatPartArr); var deciamlFloatPartNum = eachDecimalFloatPartNum.reduce((accumulator, currentValue) => { return accumulator + currentValue; }) return decimalIntPartNum + deciamlFloatPartNum; //整数部分与小数部分相加得到转换后的十进制小数 } } console.log(binaryFloatToDecimal(1111011.111)); // 123.875 console.log(binaryFloatToDecimal(1111011)); // 123 console.log(binaryFloatToDecimal(0.111)); // 0.875 二进制与十六进制的转换

十六进制转二进制

若十六进制数不超过13位,可以直接用自带方法,先将十六进制转为十进制再由十进制转为二进制

var hexNum = 125adf8; var hexStr = hexNum.toString(16); //将十六进制数转为字符串 console.log(parseInt(hexStr,16).toString(2)); // "1001001011010110111111000",先将十六进制数字符串表示转为十进制数,再将十进制数转为二进制数的字符串表示

若十六进制数超过13位,使用上述方法会丢失精度,为了不丢失精度,可使用以下方法

function hex_to_bin(str) { let hex_array = [ {key:0,val:"0000"},{key:1,val:"0001"},{key:2,val:"0010"},{key:3,val:"0011"}, {key:4,val:"0100"},{key:5,val:"0101"},{key:6,val:"0110"},{key:7,val:"0111"}, {key:8,val:"1000"},{key:9,val:"1001"},{key:'a',val:"1010"},{key:'b',val:"1011"}, {key:'c',val:"1100"},{key:'d',val:"1101"},{key:'e',val:"1110"},{key:'f',val:"1111"} ] let value="" for(let i=0;i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有