为什么前端数据会出现很长的浮点数呢?

11 篇文章 0 订阅
8 篇文章 0 订阅

今天在项目中遇到了一个问题,前端数据出现了很长的浮点数。我检查了一下后端传过来的数据,数据是正确的,没有浮点。我很好奇为什么会这样,所以研究了一下这个问题的原因,顺便记录一下。

为什么会出现浮点数?

先来看一个前端出现浮点数的实例:

console.log(0.1+0.2);
//输出0.30000000000000004

为什么不是0.3呢?

这是因为计算机本身的计算机制和表示机制的问题。计算机可以表示出所有整数吗?答案是可以。计算机可以表述出所有小数吗?答案是不可以,因为计算机是用二进制来计算的,具体的计算机表示机制和计算机制,在这里不再细说,有兴趣的同学可以自己查阅,这个知识有些难度,但对于学习计算机的人来说非常重要。

事实上,所有的计算机语言都会存在精度问题,不只是JS。但像c++语言,数据类型分为int、float、double等,C++语言本身对浮点数的精度问题进行了处理,因此浮点问题会好很多。

学过JS的应该都知道JS是弱数据类型,也就是说JS不严格区分数据类型。JS不像c++那样,分为int、float、double等数据类型,JS的精度问题就显得较为突出。

如何解决浮点数?

(1)直接将浮点数截断至指定小数位。

        NumberObject.toFixed(num)

        

参数描述
num必需。规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将用 0 代替。
var num = new Number(13.37);
console.log(num.toFixed(1));  //13.3

(2)把需要计算的数字升级(乘以10的n次幂)成计算机能够精确识别的整数,等计算完毕再降级(除以10的n次幂),这是大部分编程语言处理精度差异的通用方法。

var n = (0.1*10 + 0.2*10) / 10;
console.log(n);                     //0.3


参考文章:


https://www.cnblogs.com/xinggood/p/6639022.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值