【javascript系列】十进制与二进制的互相转换
十进制转换成二进制
0.1.toString(2)
"0.0001100110011001100110011001100110011001100110011001101"
toString()方法可把一个 Number 对象转换为一个字符串,并返回结果。
语法
parseInt(string, radix);
其中,radix为可选。规定表示数字的基数,使 2 ~ 36 之间的整数。若省略该参数,则使用基数 10。但是要注意,如果该参数是 10 以外的其他值,则 ECMAScript 标准允许实现返回任意值。
二进制转换为十进制
let num = 1100100;
console.log(parseInt(num,2));
语法
parseInt(string, radix);
其中,string为必需。要被解析的字符串。radix为可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则parseInt() 将返回 NaN。
但是这个转化浮点数没用
二进制小数转换成十进制
/** * 将二进制小数部分转换为十进制数 * @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 {
const binaryFloatNumArr = binaryNum.toString().split(".")
// 将二进制整数转换为十进制数
const binaryIntParStr = binaryFloatNumArr[0]
const decimalIntPartNum = parseInt(binaryIntParStr, 2)
// 将二进制小数部分转换为十进制数
const binaryFloatPartArr = binaryFloatNumArr[1].split("")
const eachDecimalFloatPartNum = eachBinaryFloatPartToDecimal(binaryFloatPartArr)
const deciamlFloatPartNum = eachDecimalFloatPartNum.reduce((accumulator, currentValue) => { return accumulator + currentValue })
return decimalIntPartNum + deciamlFloatPartNum
}
}
console.log(binaryFloatToDecimal(1111011.111)) // 123.875
部分转载于:https://www.jianshu.com/p/e301de533bc3
还没有评论,来说两句吧...