首页 > 解决方案 > 我的功能总是会告诉我我的问题错了。为什么?

问题描述

我做了一个函数来测试你关于 Pi 的问题。每写对一个数字,你就得半分。但是,即使我只是输入“3”,它也会说我做错了。请帮忙。

function pi() {
  var piWithoutDecimals = 31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
  var yourAnswer = prompt("Pi Bonus! Half of a point for every digit of pi that you can write from memory!");
  var yourAnswerNum = parseInt(yourAnswer);
  var yourAnswerMultiplier = yourAnswerNum.toString().split(".");
  var yourAdjustedAnswer = yourAnswerNum*(10**parseInt(yourAnswerMultiplier));
  var yourAdjustedAnswerCount = yourAdjustedAnswer.toString().length;
  var yourSectionOfpiWithoutDecimals = piWithoutDecimals.toString().substring(0,parseInt(yourAdjustedAnswer-1));
  if(yourSectionOfpiWithoutDecimals==yourAnswerNum) {
    alert("Nice!! You listed "+yourAdjustedAnswerCount+" digits of Pi, and so you get "+Math.floor((yourAdjustedAnswerCount)/2)+" points!")
    points+=Math.floor((yourAdjustedAnswerCount)/2);
  } else { alert("Good try, but you got one or more digits incorrect.") }
}

pi()

标签: javascripthtmlmathparseintpi

解决方案


你首先在这一行出错:

var yourAnswerMultiplier = yourAnswerNum.toString().split(".");

如果您将此值记录为例如 input "314",您将获得数组["314"](您可能想要.split(""))。从那里开始,yourAdjustedAnswer将是 Infinity (因为 10 ** 314 太大而只是溢出)。这失败了,这显然不是你想要的。

作为建议,尝试使用浏览器/IDE 的开发人员工具逐步执行一个简单示例,并仔细观察每个步骤是否符合您的预期。

@Orkhan Alikhanov 的回答也可能提供一些提示。

    function pi() {
      var piWithoutDecimals = 31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
      var yourAnswer = prompt("Pi Bonus! Half of a point for every digit of pi that you can write from memory!");
      var yourAnswerNum = parseInt(yourAnswer);
      var yourAnswerMultiplier = yourAnswerNum.toString().split(".");
      var yourAdjustedAnswer = yourAnswerNum*(10**parseInt(yourAnswerMultiplier));
      console.log(yourAdjustedAnswer)
      var yourAdjustedAnswerCount = yourAdjustedAnswer.toString().length;
      var yourSectionOfpiWithoutDecimals = piWithoutDecimals.toString().substring(0,parseInt(yourAdjustedAnswer-1));
      if(yourSectionOfpiWithoutDecimals==yourAnswerNum) {
        alert("Nice!! You listed "+yourAdjustedAnswerCount+" digits of Pi, and so you get "+Math.floor((yourAdjustedAnswerCount)/2)+" points!")
        points+=Math.floor((yourAdjustedAnswerCount)/2);
      } else { alert("Good try, but you got one or more digits incorrect.") }
    }

    pi()


推荐阅读