如何完美解决前端数字计算精度丢失与数字格式化问题?

只有前端会数字运算不准确吗?后端为什么不会这样?

实际上并非只有前端的 javascript 有数字计算的精度问题,其他的常见语言默认都有这个问题,大家可以自己去试一试,只不过其他的语言都自带了精准计算的库,所以后端在处理数字的时候会使用语言自带的模块来保证数字计算的精准,而javascript目前还没有自带相关模块,只有第三方的模块,不过未来的javascript是可能自带精准计算模块的,这里有一个相关提案,目前处于 Stage 1 阶段,目前提案的语法如下:

function calculateBill(items, tax) 
{
    let total = 0m;
    for (let {price, count} of items)
    {
        total += price * BigDecimal(count);
    }
    return BigDecimal.round( total * (1m + tax), {maximumFractionDigits: 2, round: "up"} );
}

let items = [{price: 1.25m, count: 5}, {price: 5m, count: 1}];
let tax = .0735m;
console.log(calculateBill(items, tax));

当然上面的代码现在是无法使用的,只是提案的一个语法展示例子,而且即便支持了这个语法,从易用性上来说也不如我们接下来介绍的方法。

怎样完美解决数字计算精度问题和数字格式化问题?

答案就是 a-calc 库,这个库具备精准计算需求也兼顾了数字格式化和易用性的需求,我们都知道 bignumber.js 这类库最大的问题就是操作数一旦多起来那么就非常不直观,我们来看看 a-calc 是怎么使用的。

基础的运算:

imp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值