【问题标题】:Accept whole numbers from prompt, not decimals从提示中接受整数,而不是小数
【发布时间】:2020-11-24 14:28:12
【问题描述】:

我的代码工作正常,但我不希望它也接受小数

var choice = parseInt(prompt("Please enter 1 , 2 or 3:"));
if (choice == 1) {
  var choice = 1
} else if (choice == 2) {
  var choice = 2
} else if (choice == 3) {
  var choice = 3
} else if (choice > 3) {
  var choice = 3
  document.write("<p>Please enter 1 , 2 , or 3:</p>")
} else if (choice < 1) {
  var choice = 3
  document.write("<p>Please enter 1 , 2 , or 3:</p>")
}

【问题讨论】:

  • 顺便说一句,变量只声明一次,你不需要在每次赋值前都使用var。并且document.write 不是为了操作 DOM,不要使用它。
  • 正如 Pranjali Patil 在他们的回答中所说,您不能影响 prompt 的输入,您只能编辑输出结果。如果你想过滤输入,你需要一个真正的 HTML 元素,比如&lt;input type="number"&gt;

标签: javascript


【解决方案1】:

prompt 只需要两个属性,message 和 default。 还有

请注意,结果是一个字符串。这意味着您有时应该转换用户给出的值。例如,如果他们的答案应该是数字,您应该将值转换为数字。参考:https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt

我认为我们不能提示只接受数字或更具体的实数作为输入。

【讨论】:

    【解决方案2】:

    你可以使用!Number.isInteger(+choice)+就是unary plus

    此外,您的代码可能看起来运行良好,但它只会防止一次错误输入。例如,如果您尝试输入两次0,它将接受它。相反,您需要某种loop。用于此的典型循环是do...while loop。我在下面创建了一个示例。

    let choice = 0
    do {
      choice = prompt('Please enter 1, 2, or 3:')
    } while (choice > 3 || choice < 1 || !Number.isInteger(+choice))
    const intChoice = parseInt(choice)
    console.log(intChoice)

    为了使其更可重用,我建议也使用function 包装其中的一些逻辑。 (下面示例中的arrow function 只是我的偏好)

    const intPrompt = () => {
      let choice = 0
      do {
        choice = prompt('Please enter 1, 2, or 3:')
      } while (choice > 3 || choice < 1 || !Number.isInteger(+choice))
      return parseInt(choice)
    }
    
    console.log(intPrompt())

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      相关资源
      最近更新 更多