【问题标题】:javascript ints evaluating incorrectlyjavascript ints 评估不正确
【发布时间】:2012-02-13 20:53:19
【问题描述】:

所以我正在编写一个 javascript 应用程序,基本上如果一个数字大于另一个数字,我想交换它们的值:

if(price1 > price2)
{
  var temp = price1;
  price1 = price2;
  price2 = temp;
}

这在某个点之前都可以正常工作,但是一旦数字开始变大,即:

price1: 12345678
price2: 234556

然后表达式将评估为 false 并且不会执行任何操作。有谁知道问题是什么?谢谢!

【问题讨论】:

  • 请在某处放置一个示例页面来演示该问题。这么大的数字比较起来应该没有问题。

标签: javascript if-statement int long-integer bigint


【解决方案1】:

您确定这些是作为数字进行比较的吗?例如,如果您将代码更改为

if (+price1 > +price2) {
    var temp = price1;
    price1 = price2;
    price2 = temp;
}

有效吗?如果是这样,price1price2 是字符串,前缀 + 会将它们转换为数字。

【讨论】:

  • 我确定你成功了——'1' 的排序低于 '2',无论字符串中的数字是什么。 (+1)
  • 我敢打赌就是这样。因为问题中发布的代码确实可以正常工作,但是当它们是字符串时会失败:jsfiddle.net/Squeegy/rwchF/1
【解决方案2】:

您确定要测试数字吗?

如前所述,您指定的值并不足以证明此类错误是合理的。在我看来,这些值是按字典顺序(作为字符串)测试的。

我会相应地更改您的代码

if(Number(price1) > Number(price2)) {
    var temp = price1;
    price1 = price2;
    price2 = temp;
}

【讨论】:

    【解决方案3】:

    我假设price1price2 都是ints

    这是正确的they should have 精度为+/- 9007199254740992

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      相关资源
      最近更新 更多