【问题标题】:Is there a way to force JavaScript to return a negative value in an alert box? [duplicate]有没有办法强制 JavaScript 在警告框中返回负值? [复制]
【发布时间】:2018-12-20 12:29:33
【问题描述】:

JavaScript 返回 X - Y ,其中 X 和 Y 是实数,它们的和是负数,而不仅仅是负数。

我尝试了使用 if else 语句

if (Math.sign(function)<0)
else

if 语句只是在值前面有一个“-”来连接数字前面的字符串“减号”字符,而 else 语句只是一个常规的打印输出

function velocity_final(initial_velocity, acceleration, time)
{
    var initial_velocity = prompt('Please enter the Initial Velocity in Meters per Second');
    var acceleration = prompt('Please enter the acceleration in Meters per Second Squared');
    var time = prompt('Please enter the time in seconds');
    var final_velocity = initial_velocity + acceleration * time;
    alert('The Final Velocity is '+ final_velocity  + ' Meters Per Second');
}

【问题讨论】:

  • 对于我输入 32、-9.81、10 的提示,它返回 32-98.100000 而不仅仅是一个负数
  • 请花时间格式化您的示例代码,您不必跟进评论的内容,而是编辑帖子。您可以对帖子进行无限编辑,因此您可以随意使用。
  • 如果 JavaScript 真的解析警报中任何潜在的负数并删除它们,那将是很有趣的

标签: javascript


【解决方案1】:

prompt 总是返回一个字符串,而不是一个数字。即使该人输入了一个数字,它也将是一个代表该数字的字符串,而不是数字本身。

您需要将prompt 的结果转换为一个数字,然后才能对其执行加法运算。与字符串一起使用时,+ 是连接运算符,而不是加法运算符。

有点令人困惑的是,您实际上可以为此使用一元 +

var initial_velocity = +prompt('Please enter the Initial Velocity in Meters per Second');
var acceleration = +prompt('Please enter the acceleration in Meters per Second Squared');
var time = +prompt('Please enter the time in seconds');
var final_velocity = initial_velocity + acceleration * time;
alert('The Final Velocity is '+ final_velocity  + ' Meters Per Second');

【讨论】:

    【解决方案2】:

    + 运算符既可以是加法,也可以是字符串连接。当prompt 框返回时,它会返回一个字符串。 String + number = string,因此它将两个值连接(连接)在一起,而不是相加。要解决此问题,您可以使用单个 + 运算符(如果需要,还可以使用一些括号)将字符串转换为数字,如下所示:

    function velocity_final()
    {
        var initial_velocity = prompt('Please enter the Initial Velocity in Meters per Second');
        var acceleration = prompt('Please enter the acceleration in Meters per Second Squared');
        var time = prompt('Please enter the time in seconds');
        var final_velocity = (+initial_velocity) + (+acceleration) * (+time);
        alert('The Final Velocity is '+ final_velocity  + ' Meters Per Second');
    }
    
    console.log(velocity_final());

    如果需要,您还可以在提示返回值后立即转换值。

    PS:我删除了函数参数,因为无论如何您都是手动设置它们而不是传递任何东西。如果您最终传递值而不是向用户询问它们,您需要将它们添加回函数语句,以便正确传入。

    【讨论】:

      【解决方案3】:

      提示返回一个字符串。这样"1" +"-1" 将由于连接而导致"1-1"。为什么 "1" + "1" 在打印输出中变为 2 是因为 Javascript 如何自动尝试将字符串解析为数字,如果评估的字符串包含一个字符,它会被连接起来。您需要明确地转换数字。

      您可以使用Number(),您可以将每个字符串乘以1以自动转换它们,您可以使用parseInt(),或者您可以在返回值之前使用+,如此处其他答案所示。我会使用下面示例中提到的第一个。

      function velocity_final()
      {
          var initial_velocity = prompt('Please enter the Initial Velocity in Meters per Second');
          var acceleration = prompt('Please enter the acceleration in Meters per Second Squared');
          var time = prompt('Please enter the time in seconds');
          var final_velocity = Number(initial_velocity) + Number(acceleration) * Number(time);
          alert('The Final Velocity is '+ final_velocity  + ' Meters Per Second');
      }
      
      velocity_final();

      【讨论】:

      • 所有好的答案。感谢您在代码中显示数字部分。我已将其更改为 initial_velocity - ((-1)*acceleration*time) 并且有效。我更改为它是因为我的其他方程式之一几乎相同,除了它使用减法并且没有问题。以前我只是在执行乘法和除法,所以没有出现这种情况。我正在将我的代码从 Python 转换为 JS,所以我正在快速学习。非常感谢!
      • 每次我测试它(诚然,这是几个版本之前),隐式转换总是比显式转换更快,出于某种原因。当然,在这种情况下,性能可能无关紧要,您可以称之为更具可读性。但我倾向于使用a - -b 将字符串添加为数字。
      • "1" + "1" 不给2,它给"11"。如果操作数之一是字符串,则始终发生字符串连接(请参阅the addition operator evaluation 中的步骤 7)
      • @Birjolaxew 绝对正确,这句话“为什么“1”+“1”在打印输出中变成 2 是因为 Javascript 如何自动尝试将字符串解析为数字 " 不反映现实,实际上与您之前所说的相矛盾:"1" + "-1" not 是否被解析,即使根据引用它应该"1" + "-1""1" + "1" 产生两种不同的类型结果没有合乎逻辑的理由。它应该在两种情况下都被视为数字或两种情况下的字符串。
      • 引号后面的语句“如果评估的字符串包含一个字符,它会被连接起来。”是正确的,但我认为你误解了实际意义。如果实际变量的 any 是字符串,则结果将是连接 - typeof someVar //"string"not 如果可以解析变量的 content作为数字 - someVar = "1"。此外,这里的另一个误解是,当 "-1" 是一个可以完美有效地解析为数字的字符串时,您认为 - 是一个“字符”,而 JS 会通过 Number() 告诉您同样多的信息。
      猜你喜欢
      • 2020-09-23
      • 2010-12-14
      • 2019-12-13
      • 1970-01-01
      • 2010-09-16
      • 2014-02-21
      • 1970-01-01
      • 2010-12-01
      • 2012-07-19
      相关资源
      最近更新 更多