比较 JavaScript 中的浮点数会产生意想不到的结果

Comparing floats in JavaScript produce unexpected results

本文关键字:意想不到 结果 浮点数 JavaScript 比较      更新时间:2023-09-26

这让我大吃一惊。

http://pastebin.com/Q3MtpPpM

原来输出是"惊喜!!如果一个程序要使用大量的浮点值,这不会以某种方式破坏使用 JavaScript 吗?

比较浮点数的一种方法是使用 toFixed() 方法将它们转换为字符串值

var fl1 = 0.11;
var fl2 = 0.11;
if ( fl1.toFixed(10) == fl2.toFixed(10) )
{
  //same value
}

Javascript 数字是 64 位浮点数。 参见这个 ECMAScript 规范。

http://www.ecma-international.org/ecma-262/5.1/#sec-4.3.19

任何编程语言中的浮点运算都容易出错,并且并不总是保证准确。 有关浮点空中的更多信息,请参见下文

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

有关更多信息,请参阅以下 QA

浮点数学坏了吗?

是的,这是一个 WANT,但遵循规则可以帮助您避免错误

  1. 不要进行相等性检查
  2. 在关键浮点数的情况下,
  3. 您知道面额后的最高点数,例如货币商店将价值乘以该基数。

对于货币存储,以美分而不是多洛尔为单位。

54.67 作为 5467 ---并在显示前除以 100。

欲了解更多信息,请阅读以下文章(它适用于c ++,但将提供有关浮点错误的见解)

http://www.codeproject.com/Articles/29637/Five-Tips-for-Floating-Point-Programming