Javascript 尝试生成基本数学运算时返回NaN的函数
我试图随机生成基本的数学运算(加法、减法、乘法和除法),有时我的函数返回NaN。 我使用了函数parseInt(),但仍然存在相同的问题。如果有人能帮我提建议,我将不胜感激。 提前谢谢你Javascript 尝试生成基本数学运算时返回NaN的函数,javascript,Javascript,我试图随机生成基本的数学运算(加法、减法、乘法和除法),有时我的函数返回NaN。 我使用了函数parseInt(),但仍然存在相同的问题。如果有人能帮我提建议,我将不胜感激。 提前谢谢你 Here is my code: function randNum(min,max) { var num = min+Math.floor((Math.random()*(max-min+1))); return num; } var choose, operator, firstNum,
Here is my code:
function randNum(min,max)
{
var num = min+Math.floor((Math.random()*(max-min+1)));
return num;
}
var choose, operator, firstNum, secondNum,rightAnswer;
function getProb()
{
var chooseOp=randNum(1,4);
choose=parseInt(chooseOp);
if (choose==1)
{
oprator="+";
var choose1=randNum(0,10);
var choose2=randNum(0,10);
firstNum=parseInt(choose1);
secondNum=parseInt(choose2);
document.getElementById("mathProb").innerHTML=firstNum+operator+secondNum+"=";
rightAnswer=choose1 + choose2;
}
else if (choose==2)
{
operator="-";
var choose1=randNum(0,10);
var choose2=randNum(0,10);
firstNum=parseInt(choose1);
secondNum=parseInt(choose2);
document.getElementById("mathProb").innerHTML=firstNum+operator+secondNum+"=";
rightAnswer=firstNum - secondNum;
}
else if (choose==3)
{
operator="x";
var choose1=randNum(0,10);
var choose2=randNum(0,10);
firstNum=parseInt(choose1);
secondNum=parseInt(choose2);
document.getElementById("mathProb").innerHTML=firstNum+operator+secondNum+"=";
rightAnswer=choose1 * choose2;
}
else if (choose==4)
{
operator="/";
var choose1=randNum(0,10);
var choose2=randNum(0,10);
firstNum=parseInt(choose1);
secondNum=parseInt(choose2);
document.getElementById("mathProb").innerHTML=firstNum+operator+secondNum+"=";
rightAnswer=choose1/choose2;
}
}
您需要指定一个表示数字系统的数字,特别是以10为基数 将数字10添加到函数调用中,如下所示
firstNum = parseInt(choose1, 10);
您需要指定一个表示数字系统的数字,特别是以10为基数 将数字10添加到函数调用中,如下所示
firstNum = parseInt(choose1, 10);
您的除法运算有可能被零除,这将返回NaN。您的除法运算有可能被零除,这将返回NaN。您的“NaN”错误如下:
rightAnswer=choose1/choose2;
choose1
achoose2
是[0,1]
中的整数
一次超过121,你将0除以0,得到NaN
11除以不到一次,你将一个非空数除以0,得到无穷大,你的“NaN”错误在这里:
rightAnswer=choose1/choose2;
choose1
achoose2
是[0,1]
中的整数
一次超过121,你将0除以0,得到NaN
不到11的1倍,你将一个非空数除以0,得到无穷大,这是一个简单的语法错误:
oprator="+"; // should be `operator`
这就是为什么这句话
firstNum+运算符+secondNum+“=”代码>
。。。将实际评估为
firstNum+未定义+secondNum+“=”代码>
第一对将为您提供NaN
,NaN
+数字将再次成为NaN
,NaN
+字符串(“=”
)将导致NaN
转换为字符串,然后附加“=”(因此产生“NaN=”)
我强烈建议将置于“严格使用”在脚本开头的代码>行以捕获此类错误。这样,您将得到一个错误:
ReferenceError:分配给未声明的变量oprator
。。。并且不需要这样做,而是解析脚本中的错误。)
旁注,我有很多:
- 您的
randNum
函数将返回一个数字,因此无需在其结果上使用parseInt
(您可能需要转换此函数的参数,但即使在这里似乎也没有必要)
- 如果你除以零,你会得到无穷大;如果将0除以0,则得到
NaN
;准备或调整最小值。)
- 如果您重复输出结果的大多数语句,为什么不将它们转换为函数呢?检查代码段(由@sv_in开始,由我完成)以了解如何执行
这是一个简单的语法错误:
oprator="+"; // should be `operator`
这就是为什么这句话
firstNum+运算符+secondNum+“=”代码>
。。。将实际评估为
firstNum+未定义+secondNum+“=”代码>
第一对将为您提供NaN
,NaN
+数字将再次成为NaN
,NaN
+字符串(“=”
)将导致NaN
转换为字符串,然后附加“=”(因此产生“NaN=”)
我强烈建议将置于“严格使用”在脚本开头的代码>行以捕获此类错误。这样,您将得到一个错误:
ReferenceError:分配给未声明的变量oprator
。。。并且不需要这样做,而是解析脚本中的错误。)
旁注,我有很多:
- 您的
randNum
函数将返回一个数字,因此无需在其结果上使用parseInt
(您可能需要转换此函数的参数,但即使在这里似乎也没有必要)
- 如果你除以零,你会得到无穷大;如果将0除以0,则得到
NaN
;准备或调整最小值。)
- 如果您重复输出结果的大多数语句,为什么不将它们转换为函数呢?检查代码段(由@sv_in开始,由我完成)以了解如何执行
当您随机选择除法运算符时,对于choose1
和choose1
,都可能出现零,这意味着您试图计算rightAnswer=0/0代码>。在Javascript中,这等于NaN
。此外,这应该更经常发生,如果你在分母中选择零,在分子中选择任何其他数字,答案将显示为无穷
。当然,任何事物上的零都是零。当您随机选择除法运算符时,对于choose1
和choose1
,都可能出现零,这意味着您试图计算rightAnswer=0/0代码>。在Javascript中,这等于NaN
。此外,这应该更经常发生,如果你在分母中选择零,在分子中选择任何其他数字,答案将显示为无穷
。当然,任何事物的零都是零。当choose==1
时,操作符
被拼错为oprator
。若你们纠正它,问题就解决了
更新:
您的代码可以缩短为:当choose==1
时,operator
拼写错误为operator
。若你们纠正它,问题就解决了
更新:
您的代码可以缩短为:我还建议使用一个构造来避免所有这些if(choose==
。这里根本不需要使用parseInt()
。choose1/choose2
有时是无穷大。@Shusl choose2是一个I