【问题标题】:javascript float comparison gives unexpected result [closed]javascript浮点比较给出了意想不到的结果[关闭]
【发布时间】:2015-08-10 05:59:14
【问题描述】:

我希望这种比较不会引发错误,并且当我删除“=”时,它的行为方式与我预期的一样。知道为什么吗?

if (!0.03509624834492526 >= 0) {
    throw new Error("DOH");
}

【问题讨论】:

    标签: javascript floating-point comparison


    【解决方案1】:

    原因是!0.0350...将值转换为布尔值,结果为假。接下来,当使用等号时,将 false 与 0 进行比较是正确的,所以这是正确的。查看这些警报:

    alert('!0.03509624834492526 is "' + !0.03509624834492526 + '"')
    alert('false >= 0 is "' + (false >= 0) + '"')

    如果您想检查数字是否不大于或等于 0,那么它只留下一个选项,它更小。试试:

    if (0.03509624834492526 < 0) {
        throw new Error("DOH");
    }
    

    【讨论】:

      【解决方案2】:

      找到答案,必须明确比较的顺序,见下文:

      if (!(0.03509624834492526 >= 0)) {
          throw new Error("DOH");
      }
      

      【讨论】:

      • x &lt; y代替!(x &gt;= y)
      【解决方案3】:

      这可能是因为您使用了 3 个运算符,即 (!,>,=)

      您可以在一个表达式中使用 2 个运算符

      你可以改变你的表情

      if((!0.03509624834492526 > 0)&&(!0.03509624834492526 = 0)){
      --- 
      }
      

      希望这对你有用

      【讨论】:

      • “未捕获的 ReferenceError:分配中的左侧无效”。这根本不是 JavaScript 或任何其他编程语言的工作方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 2023-03-05
      • 2019-05-19
      • 2017-01-05
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多