Javascript:为什么“10-2”返回“-8”而不是“8” [关闭]

Javascript : Why does "10-2" returns "-8" instead of "8" [closed]

提问人:Just1.0 提问时间:10/12/2023 最后编辑:BarmarJust1.0 更新时间:10/12/2023 访问量:59

问:


这个问题是由错别字或无法再现的问题引起的。虽然类似的问题可能在这里是主题,但这个问题的解决方式不太可能帮助未来的读者。

上个月关闭。

这是我的代码:

function jeu(x, y) {
  let v1 = x,
    v2 = x;
  x > y ? v1 = y : v2 = y;
  alert(v2 - v1);
}

jeu(2, 10);

有 2 个参数:和 。xy

第一行是最小的值和最大的值,你可以理解。但是当我使用一些数字时,例如,代码返回一个负数,而我正在执行“最大 - 最小”。v1v2jeu(2,10)

有谁知道它为什么这样做?(对不起,我的英语不好)(我不能把它像代码一样,不知道为什么。

javascript html 函数 变量 数字

评论

1赞 Matthew 10/12/2023
忽略您列出的实际代码,您可以使用它来获取给定数字的绝对(正)值,因此无论是否大于 。Math.abs(...)Math.abs(x - y)xy
0赞 Barmar 10/12/2023
您还可以使用 和 分配较小和较大的数字。或者只是使用 .你这样做的方式过于令人困惑。Math.min()Math.max()if (x > y)
1赞 Barmar 10/12/2023
当我运行你的代码时,我没有得到.8-8
0赞 Just1.0 10/12/2023
@Cully我明白你的意思,但是如果我做“jeu(2,4)”,它会返回“2”,这不是一个负数。
0赞 Barmar 10/12/2023
@Cully 你的第一句话是错误的。

答:

0赞 Luis 10/12/2023 #1

在您的情况下,被视为字符串,而不是数字。"10""2"

如果要执行数字减法,则应使用或类似以下命令将字符串转换为数字:parseInt()parseFloat()

function jeu(x, y) {
  let v1 = parseInt(x, 10); // Convert x to an integer
  let v2 = parseInt(x, 10); // Convert x to an integer
  x > y ? v1 = parseInt(y, 10) : v2 = parseInt(y, 10);
  alert(v2 - v1);
}

jeu(2, 10);

2赞 Mr. Polywhirl 10/12/2023 #2

与其创建两个难以理解的变量,不如将它们命名为 和 。为它们分配条件逻辑。v1v2minmax

function jeu(x, y) {
  const
    max = x > y ? x : y,
    min = x < y ? x : y;
  console.log(JSON.stringify({ min, max }));
  return max - min;
}

console.log(jeu(2, 10) === jeu(10, 2));

可能有点矫枉过正,但你也可以使用:Math.minMath.max

function jeu(x, y) {
  const
    max = Math.max(x, y)
    min = Math.min(x, y);
  console.log(JSON.stringify({ min, max }));
  return max - min;
}

console.log(jeu(2, 10) === jeu(10, 2));

更简单的版本是调用:Math.abs

function jeu(x, y) {
  return Math.abs(x - y);
}

console.log(jeu(2, 10) === jeu(10, 2));