Effective Javascript 阅读笔记(1)-理解Javascript 的浮点数

本文深入探讨了JavaScript中的数字类型,包括其内部实现为双精度浮点数的方式,并解释了这可能导致的计算不精确问题,提供了避免此类问题的有效建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     对于数据类型,JavaScript 只有一种数据类型,无论是整数还是浮点,都会将它统一的处理为数字“number”类型。

typeof 17// "number "

typeof 95.2// "number "

typeof -17// "number "

JavaScript 中的所有数字都是双精度浮点数。(注:类型---double float数据类型,此数据类型与单精度数据类型(float)相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,通常情况,单精度浮点数占4字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,;双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308。)

一般情况下除了位运算符比较特殊,其他的算数运算基本上都可以使用两者的组合进行运算。但是JavaScript会进行额外的工作。因为数字是已浮点数进行存储的,所以必须先转化为整数,然后在转化会浮点数。

因此就会导致一些计算过程的不精确


例如上面的例子,计算中会产生不精确的计算

实际上对于0.1+0.2,JavaScript首先先把0.1与0.2转化成二进制


由于在js中浮点数只有53位的精度,导致后面的一些位数会被舍弃,所以计算完成之后再次转化为十进制的时候就会出现偏差。

所以,为了防止这种情况出现,在浮点型计算操作的时候,尽可能的采去整数值运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值