javascript - 我的功能总是会告诉我我的问题错了。为什么?
问题描述
我做了一个函数来测试你关于 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()
解决方案
你首先在这一行出错:
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()
推荐阅读
- amazon-web-services - Cloudformation 中 Lambda 自定义资源的简单示例
- django - 按天分组,然后再按用户分组以获取对象列表或对象 ID
- javascript - 在 Ag-grid 中编辑标题
- symfony - maximilienGilet/notification-bundle 出错
- polymer - 将手势事件添加到自定义元素 Polymer 2.0
- html - 视频标签不显示 Angular 5 的 webrtc 流视频
- amazon-web-services - Cakephp 登录 AWS Elastic Beanstalk
- android - LiveData 和 ViewModel 不更新 textview
- spring-data - 使用 SpringData 从 Aerospike 获取多个值
- ios - MTLBuffer分配+CPU/GPU同步