美文网首页
理解JavaScript中的浮点数

理解JavaScript中的浮点数

作者: Originalee | 来源:发表于2018-11-30 21:27 被阅读11次

如果你除了JavaScript外还有接触过其他的编程语言,那么你应该会发现在别的编程语言中,数值型的数据类型有好几种,例如Objective-C中的int,double, float,long等,而在JavaScript中就有一个特殊的点,它只有Number这一种数值型的数据类型。因为这一特殊性,Number也是ECMAScript中需要特别关注的一个数据类型了。

而一句话来概括JavaScript中的Number类型就是,这是由IEEE754格式来表示整数和浮点数值(双精度数值)。

双精度浮点数值能准确的表示高达53位精度的整数,从-253到253这个区间的所有整数都是有效的双精度浮点数,因此,尽管JavaScript中缺少明显的整数类型,但是依然可以进行整数运算。

所谓浮点数值,就是该树脂中必须包含一个小数点,并且小数点后面必须至少有一位数字。虽然个位数点前面可以没有整数,但是一般的编程过程中不推荐这种写法。

大多数的算术运算符都可以使用整数、实数或两者的组合进行计算。

0.1 * 0.19 // 0.19
-99 + 100; // 1
21-12.3; //  8.7
2.5 / 5; // 0.5
21 % 8; // 5

由于保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会不失时机地将浮点数值转换为整数值。显然,如果小数点后面没有跟任何数字,那么这个数值就可以作为整数值来保存。同样的,如果浮点数值本身表示的就是一个小数(1.0),那么该数值也会被转换为整数。

关于浮点数最后的警示是,我们应该时刻对它们保持警惕,浮点数看似跟其他语言的浮点数并无两样,但是它们是出了名的不精确。甚至一些看起来最简单的算术运算都会产生不正确的结果。

0.1 + 0.2; // 0.30000000000000004

这里使用的必须是这个经典的例子,也是被当做面试题问过无数遍的问题。尽管64位的精度已经相当高了,但是双精度浮点数也只能表示一组有限的数字,而不能表示所有的实数集。浮点运算只能产生近似的结果,四舍五入到最接近的可表示的实数。

关于浮点数会产生舍入误差的问题,有一点需要明确:这是使用基于IEEE754数值的浮点计算的通病,ECMAScript并非独此一家,其他使用相同数值格式的语言也存在这个问题。

相关文章

  • 理解JavaScript中的浮点数

    如果你除了JavaScript外还有接触过其他的编程语言,那么你应该会发现在别的编程语言中,数值型的数据类型有好几...

  • JavaScript 中的数字 Number 易于忽略点

    JavaScript 中的数字 Number 易于忽略点 一、浮点数 1. 浮点数的存储 保存浮点数值需要的内存空...

  • 理解JavaScript浮点数值!

    所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。虽然小数点前面可以没有整数,但我们...

  • 数据类型--数值类型中的浮点数

    概述 最近在学习《JavaScript高级程序设计》(第三版)中的数据类型,学到数值类型中的浮点数,了解到了浮点数...

  • JavaScript浮点数的精度问题深究

    JavaScript浮点数的精度问题 javascript浮点数的精度问题是老生常谈了,但往往只知道0.1 + 0...

  • 最完美的浮点数计算

    浮点型计算 在JavaScript中,整数和浮点数都属于Number类型,它们都统一采用64位浮点数进行存储。 虽...

  • JS-数字

    JavaScript不区分整数和浮点数,所有的数字都是用浮点数表示。JavaScript能表示的数字范围我觉得没必...

  • 2.理解JavaScript的浮点数

    JavaScript中所有的数字都是双精度浮点数 JavaScript不会直接将操作数作为浮点数进行运算,而是会将...

  • javascript中0.1+0.2背后的原理

    浮点数的存储 首先要搞清楚javascript如何存储小数的,它和其他语言存储,javascript中的整数和小数...

  • JavaScript——数字类型&运算

    JavaScript中的所有数字均为浮点数: > 1 === 1.0 是 特殊数字包括: NaN (“非数字”) ...

网友评论

      本文标题:理解JavaScript中的浮点数

      本文链接:https://www.haomeiwen.com/subject/ogekcqtx.html