关于高精度数据计算库bignumber:

一般的业务系统,“浮点数精度丢失”问题所导致的后果可能在业务可接受的范围,所以并没有起很多程序员的重视;
但是对于健壮性要求较强(比如,金融或财务系统),精度丢失所引起的后果就会是灾难性的,程序员离跑路已经不远了~~。

用js的基础类型number对小数进行乘除运算的时候会存在精度问题,例如:

0.1+0.2 = 0.30000000000000004
0.1*0.2 = 0.020000000000000004

根本原因:0.1这个十进制小数并不能很好的被二进制表示

为什么0.1不能被二进制表示呢?


十进制小数转二进制的算法是:
整数部分:除 2 取余,直到商数为 0,结果逆序排列;例如十进制10转换为二进制是1010
小数部分:乘 2 取整,直到小数部分乘积积为 0,结果顺序排列;

以0.125为例演示如下:
0.125 × 2 = 0.25 .......................0
0.25 × 2 = 0.5 .......................0
0.5 × 2 = 1.0 .......................1
即 十进制的0.125,表示成二进制为 0.001

现在来看十进制的0.1 转二进制:
0.1 × 2 = 0.2 .....................0
0.2 × 2 = 0.4 .....................0
0.4 × 2 = 0.8 .....................0
0.8 × 2 = 1.6......................1
0.6 × 2 = 1.2......................1
0.2 × 2 = 0.4......................0

聪明的你,应该已经发现了,这个算法过程是无限循环的,因此可以得出结论:浮点数的小数部分会有精度丢失问题

======================&#

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值