只有前端会数字运算不准确吗?后端为什么不会这样?
实际上并非只有前端的 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