【javascript系列】十进制与二进制的互相转换

比眉伴天荒 2022-10-05 00:38 206阅读 0赞
十进制转换成二进制
  1. 0.1.toString(2)
  2. "0.0001100110011001100110011001100110011001100110011001101"

toString()方法可把一个 Number 对象转换为一个字符串,并返回结果。

语法
  1. parseInt(string, radix);

其中,radix为可选。规定表示数字的基数,使 2 ~ 36 之间的整数。若省略该参数,则使用基数 10。但是要注意,如果该参数是 10 以外的其他值,则 ECMAScript 标准允许实现返回任意值。

二进制转换为十进制
  1. let num = 1100100;
  2. console.log(parseInt(num,2));
语法
  1. parseInt(string, radix);

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

但是这个转化浮点数没用

二进制小数转换成十进制
  1. /** * 将二进制小数部分转换为十进制数 * @param binaryFloatPartArr 二进制小数部分中由小数各位组成的数组 */
  2. function eachBinaryFloatPartToDecimal(binaryFloatPartArr) {
  3. return binaryFloatPartArr.map((currentValue, index) => {
  4. return Number(currentValue) * Math.pow(2, (-(index + 1)))
  5. })
  6. }
  7. /** * 将二进制小数(包含整数部分和小数部分)转换为十进制数 * @param binaryNum 二进制数(可能是整数,也可能是小数) */
  8. function binaryFloatToDecimal(binaryNum) {
  9. // 如果该二进制只有整数部分则直接用 parseInt(string, radix) 处理
  10. if (Number.isInteger(binaryNum)) {
  11. return parseInt(binaryNum, 2)
  12. } else {
  13. const binaryFloatNumArr = binaryNum.toString().split(".")
  14. // 将二进制整数转换为十进制数
  15. const binaryIntParStr = binaryFloatNumArr[0]
  16. const decimalIntPartNum = parseInt(binaryIntParStr, 2)
  17. // 将二进制小数部分转换为十进制数
  18. const binaryFloatPartArr = binaryFloatNumArr[1].split("")
  19. const eachDecimalFloatPartNum = eachBinaryFloatPartToDecimal(binaryFloatPartArr)
  20. const deciamlFloatPartNum = eachDecimalFloatPartNum.reduce((accumulator, currentValue) => { return accumulator + currentValue })
  21. return decimalIntPartNum + deciamlFloatPartNum
  22. }
  23. }
  24. console.log(binaryFloatToDecimal(1111011.111)) // 123.875

部分转载于:https://www.jianshu.com/p/e301de533bc3

发表评论

表情:
评论列表 (有 0 条评论,206人围观)

还没有评论,来说两句吧...

相关阅读

    相关 十进制转换二进制

    输入一个十进制的数,将其转换为二进制!!(也适用于八进制!当然,代码中的2就要变为8了) (如有错误,欢迎提出) //十进制转换为二进制