Javascript 字母等级值到数字值,然后取平均值
我正在为我的学校网络表单编写一个脚本,用于计算学分和gpa值。当我运行字母等级的输入时,我将其转换为大写,然后使用if/else语句检查A-F选项,并将输入值转换为数字值,然后传递给另一个函数以平均列输入的总数,然后返回字母等级。我遇到的问题是,当我使用keyup jquery函数时,它返回一个NaN值而不是一个字母。。。帮助Javascript 字母等级值到数字值,然后取平均值,javascript,string,math,Javascript,String,Math,我正在为我的学校网络表单编写一个脚本,用于计算学分和gpa值。当我运行字母等级的输入时,我将其转换为大写,然后使用if/else语句检查A-F选项,并将输入值转换为数字值,然后传递给另一个函数以平均列输入的总数,然后返回字母等级。我遇到的问题是,当我使用keyup jquery函数时,它返回一个NaN值而不是一个字母。。。帮助 function CalcGPA(a,b,c,d,e,f,g,h,i,j){ var initial=a+b+c+d+e+f+g+h+i+j; var total=ini
function CalcGPA(a,b,c,d,e,f,g,h,i,j){
var initial=a+b+c+d+e+f+g+h+i+j;
var total=initial/10;
return total;}
function Convert(a){
var b=a.value.toUpperCase();
if(b.value="A")
{
b=4.0;
return b;
}
else if(b.value="A-")
{
b=3.67;
return b;
}
else if(b.value="B+")
{
b=3.33;
return b;
}
else if(b.value="B")
{
b=3.0;
return b;
}
else if(b.value="B-")
{
b=2.67;
return b;
}
else if(b.value="C+")
{
b=2.33;
return b;
}
else if(b.value="C"){
b=2.0;
return b;
}
else if(b.value="C-")
{
b=1.7;
return b;
}
else if(b.value="D")
{
b=1.0;
return b;
}
else {
b=0.0;}
return b;}
function toLetter(a){
if(a<=4||a>=3.68)
{
a="A";
}
else if(a<=3.67 || a>=3.34)
{
a="A-";
}
else if(a<=3.33 || a>=3.1)
{
a="B+";
}
else if(a<=3.0 || a>=2.68)
{
a="B";
}
else if(a<=2.67 || a>=2.34)
{
a="B-";
}
else if(a<=2.33 || a>=2.1)
{
a="C+";
}
else if(a<=2.0 || a>=1.8)
{
a="C";
}
else if(a<=1.7 || a>=1.4)
{
a="C-";
}
else if(a<=1.3 || a>=1.1)
{
a="D+";
}
else if (a=1.0)
{
a="D";
}
else {
a="F";}
return a;}
函数CalcGPA(a,b,c,d,e,f,g,h,i,j){
初始var=a+b+c+d+e+f+g+h+i+j;
var总计=初始值/10;
返回总数;}
函数转换(a){
var b=a.value.toUpperCase();
如果(b.value=“A”)
{
b=4.0;
返回b;
}
否则,如果(b.value=“A-”)
{
b=3.67;
返回b;
}
否则,如果(b.value=“b+”)
{
b=3.33;
返回b;
}
否则如果(b.value=“b”)
{
b=3.0;
返回b;
}
否则,如果(b.value=“b-”)
{
b=2.67;
返回b;
}
否则,如果(b.value=“C+”)
{
b=2.33;
返回b;
}
否则,如果(b.value=“C”){
b=2.0;
返回b;
}
否则,如果(b.value=“C-”)
{
b=1.7;
返回b;
}
否则,如果(b.value=“D”)
{
b=1.0;
返回b;
}
否则{
b=0.0;}
返回b;}
功能计数器(a){
如果(a=3.68)
{
a=“a”;
}
否则,如果(a=3.34)
{
a=“a-”;
}
否则如果(a=3.1)
{
a=“B+”;
}
否则,如果(a=2.68)
{
a=“B”;
}
否则如果(a=2.34)
{
a=“B-”;
}
否则如果(a=2.1)
{
a=“C+”;
}
否则如果(a=1.8)
{
a=“C”;
}
否则如果(a=1.4)
{
a=“C-”;
}
否则如果(a=1.1)
{
a=“D+”;
}
否则如果(a=1.0)
{
a=“D”;
}
否则{
a=“F”}
返回一个;}
在toLetter
函数中,我想应该使用parseInt
或parseFloat
,在if语句中,使用两个等号而不是一个,以便比较:
function toLetter(a) {
var a = parseInt(a); //or parseFloat if you need decimals.
//rest of your code...
我强烈建议在这里进行一些重构,例如,不要声明然后返回,只需返回:
else if(b.value == "B+")
{
return 3.33;
}
另一项改进是,将您的语句移动到交换机:
switch(b.value) {
case "B+" :
return 3.33;
case "B" :
return 3.0;
}
我要做的一件事,不是使用条件或案例,而是使用地图:
var scoresForValues = {
"A": 4.0,
"A-": 3.67,
"B+": 3.33 //Keep filling until you get all your values.
};
然后您的Convert
函数将非常简单和简短:
function Convert(a) {
var b = a.value.toUpperCase();
return scoresForValues[b];
}
对整数使用
parseInt
,或者如果要使用十进制值,请使用parseFloat
这里有几点:
首先,您试图使用“=”进行比较,但这不起作用。您需要使用“==”。例如,else if(b.value=“C+”)应该是else if(b.value==“C+”)
第二,当您声明b并为其分配输入时,您已将b设置为字符串:
var b=a.value.toUpperCase()
所以,不要给它赋值并返回它,只返回数值。toLetter中的a变量也是如此。只要返回字母值,就可以在匹配后立即跳出所有elseif行
因此,不是a=“B-”;,只需返回“B-”
最后,您可能应该使用switch case,而不是一堆if。。。否则的话。注意:你不需要休息;返回3之后(例如),因为返回会使您退出函数。若你们使用的是外壳开关,并没有导致返回,并没有中断;会给你造成很大的伤害
function Convert(a){
var b=a.value.toUpperCase();
switch (b) {
case "A":
return 4.0;
break;
case "A-":
return 3.67;
break;
case "B+":
return 3.33;
break;
case "B":
return 3;
break;
case "B-":
return 2.67;
break;
case "C+":
return 2.33;
break;
case "C":
return 2;
break;
case "C-":
return 1.67;
break;
case "D":
return 1;
break;
default:
return 0;
}
您可以演示如何调用这些函数吗?更大的教训是,您应该使用调试器或console.log来仔细检查您认为自己在做什么。另外,这不是a。那么b.value='b+'呢。这不应该像b.value=='b+'那样吗。还有第二个参数是base的parseInt?我已经编辑了关于单个等号的point。感谢您的见解。我的toUpperCase()没有定义,但我在调用它时向它传递了一个字符串变量。。。这是无法读取属性“toUpperCase”未定义的问题。我正在使用:函数convert(a){var b=a.value.toUppercase();return b;}根据您的注释中的代码,这似乎是一个输入错误,您正在调用toUppercase并且应该是toUppercase(C应该是大写)。如果您已经返回了值,则无需中断开关。