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

nic*_*ckf 15 javascript floating-point int

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

var isNegative = number < 0.0 || number == 0.0 && 1 / number < 0.0;
Run Code Online (Sandbox Code Playgroud)

我认为这种最初奇怪的标志检查的原因是识别-0为负面,但有没有理由使用0.0而不是0

rsp*_*rsp 18

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

2011年原创答案

JavaScript中只有一种数字类型 - IEEE 754双精度浮点数.

查看这些问题,了解该事实的一些后果:

2015年更新

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

现在我们有:

我们很快就会:

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

至少WebAssembly中的以下内容:

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

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

这些在类型数组中可用:

  • 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 Neis和Jakob Kummerow的V8
  • Caio Lima和Robin Morisset的JSC
  • Robin Templeton的SpiderMonkey


Que*_*nUK 5

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

\n\n
var isNegative = number < 0 || number == 0 && 1 / number < 0;\n
Run Code Online (Sandbox Code Playgroud)\n\n

这与闭包库中的工作方式完全相同。但一些阅读代码的程序员会认为它只适用于整数。

\n\n

附录:-\n我最近看到 D. Baranovskiy 写的一篇文章,他对 Google Closure 库提出了很多批评,并指出 \xe2\x80\x9cIt\xe2\x80\x99 是由 Java 开发人员编写的 JavaScript 库,显然不要\xe2\x80\x99t获取JavaScript。\xe2\x80\x9d他在color.js中指出了更多这种类型混淆的例子\n https://github.com/google/closure-library/blob/master /closure/goog/color/color.js

\n\n

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

\n