Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 字母等级值到数字值,然后取平均值_Javascript_String_Math - Fatal编程技术网

Javascript 字母等级值到数字值,然后取平均值

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

我正在为我的学校网络表单编写一个脚本,用于计算学分和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=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应该是大写)。如果您已经返回了值,则无需中断开关。