Javascript中的浮点数和整数之间的区别?

时间:2011-03-03 11:01:30

标签: javascript floating-point int

我正在浏览Google Closure Library中的一些代码,我找到了这一行:

var isNegative = number < 0.0 || number == 0.0 && 1 / number < 0.0;

我认为这种最初看起来很奇怪的签名的原因是将-0标识为否定,但有没有理由使用0.0代替0

2 个答案:

答案 0 :(得分:18)

(自2011年发布此答案以来发生了很多变化 - 请参阅下面的更新)

2011年原创答案

JavaScript中只有一种数字类型 - IEEE 754 double precision floating-point number

对于这一事实的某些后果,请参阅这些问题:

2015年更新

自从我写这个答案以来已经有4年多了,现在的情况要复杂得多。

现在我们有:

我们很快就会:

这意味着JavaScript中可用的数字类型数量将从一个增长:

至少WebAssembly中的以下内容:

  • 8位整数(有符号和无符号)
  • 16位整数(有符号和无符号)
  • 32位整数(有符号和无符号)
  • 64位整数(有符号和无符号)
  • 32位浮点
  • 64位浮点

(从技术上讲,所有整数类型的内部表示在最低级别是无符号的,但不同的运算符可以将它们视为有符号或无符号,例如int32.sdivint32.udiv等。)

typed arrays中提供了这些内容:

  • 8位二进制补码有符号整数
  • 8位无符号整数
  • 8位无符号整数(钳位)
  • 16位二进制补码有符号整数
  • 16位无符号整数
  • 32位二进制补码有符号整数
  • 32位无符号整数
  • 32位IEEE浮点数
  • 64位IEEE浮点数

asm.js定义了以下数字类型:

  • INT
  • 签名
  • 无符号
  • intish
  • Fixnum对象
  • 双?
  • 浮?
  • floatish

2017年更新

有人建议在ECMAScript中添加任意精度的整数 - 请参阅:

截至2017年12月,这是2017年12月15日最后更新的第2阶段草案。

实施状态:

    Georg Liis和Jakob Kummerow的
  • V8
  • Caio Lima和Robin Morisset的
  • JSC
  • Robin Templeton的
  • SpiderMonkey

答案 1 :(得分:2)

虽然Javascript中只有一种类型的数字,但许多程序员喜欢表明他们的代码可以使用浮点数和整数。显示小数点的原因是文档

var isNegative = number < 0 || number == 0 && 1 / number < 0;

这与Closure Library中的完全相同。但是一些程序员在阅读代码时会认为它只适用于整数。

附录: - 我最近发表了一篇由D. Baranovskiy撰写的文章,他对Google Closure库提出了许多批评,并指出“这是一个由Java开发人员编写的JavaScript库,他们显然没有获得JavaScript。”他指出了更多的例子这种类型混淆,在color.js https://github.com/google/closure-library/blob/master/closure/goog/color/color.js

https://www.sitepoint.com/google-closure-how-not-to-write-javascript/