JS十进制转为任意进制、任意进制转为十进制、二进制转为任意进制

js实现进制转换

一、十进制转为二进制、八进制、十六进制

 //方法一:使用js原生方法toString(sys)
 function test1(num,sys){
    return num.toString(sys);
    }
    
//方法二:对十进制进行整除,并将余数放置到一个数组,结束循环后,逆置余数
function test2(num,sys){
        let arr =[];
        while(num!=0){
            arr.push(num%sys);
            num = Math.floor(num/sys);
        }
        arr.reverse();
        return arr.join('');
    }

二、二进制、八进制、十六进制转为十进制

方法一:使用js方法 paraseInt(sys),参数代表,什么进制转为十进制
function test1(num,sys){
  return num.parseInt(sys);
}
test1(num,2)//二进制转为10进制
test1(num,16)//十六进制转为10进制

三、二进制转为各种进制

//二进制转为十进制
function ttt(num){
    num = num.reverse();
    let ten = 0;
    for(let i=0;i<num.length;i++){
        ten += num[i]*Math.pow(2,i);
    }
    return ten;
}

//二进制转为8进制或者16进制
function tte(num,sys){
    let group =parseInt(Math.log2(sys)) ;
    // num = num.toString().split('');
    while (num.length%group!==0){
        num.unshift('0');
    }
    let newArr = [];//最后返回的数字
    let i = 0;
    while(i<num.length){
        let s = i;
        let e = i+group;
        let res = ttt(num.slice(s,e));
        newArr.push(res);
        i+=group;//移动三个位置
    }
    return newArr.join('');
}

function byteToother(num,sys){
    if(sys == 10){
        return ttt(num,sys);
    }else{
        return tte(num,sys);
    }
}
### 关于 el-table 合计时精度丢失的问题 在前端开发中,`el-table` 是 Element UI 提供的一个表格组件,用于展示复杂的数据结构并支持多种操作。当涉及数值计算(如合计)时,可能会因为 JavaScript 的浮点数运算机制而导致精度丢失。 #### 原因分析 JavaScript 中的浮点数运算是基于 IEEE 754 标准实现的,该标准可能导致某些十进制小数无法精确表示为二进制形式,从而引发精度误差[^3]。例如: ```javascript console.log(0.1 + 0.2); // 输出 0.30000000000000004 ``` 这种现象同样会发生在 `el-table` 的合计功能中,尤其是在处理财务数据或其他高精度需求场景下显得尤为突出。 --- ### 解决方案 以下是几种常见的解决方案来解决 `el-table` 合计时的精度丢失问题: #### 方法一:使用整数替代浮点数 通过将所有涉及到的小数转换成整数来进行计算,最后再将其还原回原始单位。这种方法可以完全规避浮点数运算带来的精度损失。 假设货币单位是元,则可以通过乘以 100 将其转化为分进行计算: ```javascript // 示例代码 function toInteger(value) { return value * 100; } function fromInteger(value) { return value / 100; } let sumInCent = data.reduce((acc, item) => acc + toInteger(item.amount), 0); let finalSum = fromInteger(sumInCent).toFixed(2); // 结果保留两位小数 ``` 此方法简单有效,在金融领域应用广泛[^4]。 --- #### 方法二:引入第三方库 Big.js 或 Decimal.js 对于更复杂的业务逻辑或者更高精度的需求,推荐使用专门设计用来处理大数和高精度运算的库——Big.js 和 Decimal.js。这些库能够提供任意精度的支持,并且易于集成到项目当中。 下面是一个利用 Decimal.js 实现的例子: ```javascript import { Decimal } from 'decimal.js'; const totalAmount = new Decimal(0); data.forEach(item => { const amount = new Decimal(item.amount || 0); totalAmount.add(amount); }); const formattedTotal = totalAmount.toFixed(2); // 设置显示位数 ``` 这种方式不仅解决了精度问题,还提供了丰富的 API 来满足各种算术需求[^5]。 --- #### 方法三:自定义合计函数 如果不想依赖外部库也可以编写自己的加法器函数,采用字符串拼接的方式逐位相加每一位数字,最终得到无损的结果。不过相比前两种方式效率较低而且容易出错,因此仅适用于特殊情况下不便于加载额外资源的时候考虑。 --- ### 总结 针对 `el-table` 合计过程中可能出现的精度丢失情况,建议优先选用 **方法一** 即把金额转为整型后再做累加;其次可以选择性能优越、接口友好的专用数学类库比如 **Decimal.js/Big.js**(见上述第二种办法),它们能很好地应对绝大多数实际应用场景下的挑战。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值