比较 JavaScript 中的浮点数会产生意想不到的结果
Comparing floats in JavaScript produce unexpected results
这让我大吃一惊。
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,但遵循规则可以帮助您避免错误
- 不要进行相等性检查 在关键浮点数的情况下,
- 您知道面额后的最高点数,例如货币商店将价值乘以该基数。
对于货币存储,以美分而不是多洛尔为单位。
54.67 作为 5467 ---并在显示前除以 100。
欲了解更多信息,请阅读以下文章(它适用于c ++,但将提供有关浮点错误的见解)
http://www.codeproject.com/Articles/29637/Five-Tips-for-Floating-Point-Programming
相关文章:
- JavaScript 模块模式给出了意想不到的结果
- 使用 jQuery 从 HTML 获取 id,给出意想不到的结果
- Javascript for loop产生意想不到的结果
- Javascript计算产生意想不到的结果
- 比较 JavaScript 中的浮点数会产生意想不到的结果
- 弄乱jquery产生了意想不到的结果
- 当元素相等时,Array.sort() 会产生意想不到的结果
- 在JavaScript中循环获得意想不到的结果
- Math.round与Math.ceil相比会产生意想不到的结果
- CSS旋转和平移转换会产生意想不到的结果
- 在Javascript函数中传递参数产生意想不到的结果
- 函数迭代日期数组会产生意想不到的结果
- 重新启动函数会产生意想不到的结果
- CSS为jQuery页面生成与意想不到的结果
- json字符串中的数组长度在angular ng-repeat中返回意想不到的结果
- Javascript:从对象方法内部调用回调函数,产生意想不到的结果
- Javascript: Async嵌套函数在其他Async函数中会产生意想不到的结果
- Raphael-使用transform缩放js路径-意想不到的结果
- 使用窗口.反复打开会产生意想不到的结果
- Lodash isUndefined提供了意想不到的结果