javascript中五个值的平均值



我在一所特许学校工作,我只是在学习javascript。我有一些代码是由以前担任我职位的人写的,在我看来它应该起作用,但事实并非如此。

这是我在SIS中的自定义HTML页面中的内容:

GED Status: <script language="Javascript">gedCheck('~(ELC_tspp_GED_read_score)','~ (ELC_tspp_GED_wri_score)','~(ELC_tspp_math_GED_score)','~(ELC_science_state_exam_score)','~(soc_sci_state_exam_score)')</script>

这似乎是正确地从各种DB字段中检索值,因为javascript例程正在评估每个值,以确保它至少为410。但就目前而言。。。

以下是javascript例程代码:

function gedCheck(read,wri,math,sci,soc) {
if( read < 0 && read > 1000 )
    read = 0;
if( wri < 0 && wri > 1000 )
    wri = 0;
if( math < 0 && math > 1000 )
    math = 0;
if( sci < 0 && read > 1000 )
    read = 0;
if( soc < 0 && soc > 1000 )
    soc = 0;        
if ( (read >= 410) && (wri >= 410) && (math >= 410) && (sci >= 410) && (soc >= 410) ) {
    if( read+wri+math+sci+soc >= 2250 )
        document.write( "PASSED" )
}
else
    document.write( "NOT PASSED" )
}

它应该检查GED测试中的每个分数是否至少为410,并且所有分数的总和应该至少为2250。然而,它还没有发展到最后一部分。如果所有分数都超过410,则返回"PASSED"。

我试过了,但也不起作用。

function gedCheck(read,wri,math,sci,soc) {
if( read < 0 && read > 1000 )
    read = 0;
if( wri < 0 && wri > 1000 )
    wri = 0;
if( math < 0 && math > 1000 )
    math = 0;
if( sci < 0 && read > 1000 )
    read = 0;
if( soc < 0 && soc > 1000 )
    soc = 0;        
if ( (read >= 410) && (wri >= 410) && (math >= 410) && (sci >= 410) && (soc >= 410) )   {
    if( read+wri+math+sci+soc/5 >= 450 )
        document.write( "PASSED" )
}
else
    document.write( "NOT PASSED" )
}

有人能帮我计算一下吗,这样它要么对所有5个数字求平均值,只有当平均值为450时才返回"PASSED",要么简单地将所有5个数据相加,只有当总数为2250或更大时才返回"PASSED"?

要获得平均值,您需要执行以下操作:

(((read + wri + math + sci + soc) / 5) > 450)

加法两边的括号确保你将所有分数的总和除以5。按照你现在的方式,你只需要把soc的分数除以5。

编辑(重写整个方法):

function gedCheck(read, wri, math, sci, soc) {
// As was said before, these should all be ORs
// If the score is less than 0, OR greater than 1000
if( read < 0 || read > 1000 ) {
    read = 0;
}
if( wri < 0 || wri > 1000 ) { // I prefer to put the braces around all if/else statements just for absolute clarity
    wri = 0;
}
if( math < 0 || math > 1000 ) {
    math = 0;
}
if( sci < 0 || read > 1000 ) {
    read = 0;
}
if( soc < 0 || soc > 1000 ) {
    soc = 0;        
}
if ( read >= 410 && // Doing this will only pass the student
     wri >= 410  && // if ALL of the conditions are met.
     math >= 410 && 
     sci >= 410  && 
     soc >= 410  &&
     (    (read + wri + math + sci + soc) >= 2250 || // Separated more for clarity
          ((read + wri + math + sci + soc) / 5) > 450) ) { 
    // Either all scores total over 2250
    // Or the average of all 5 are over 450 to pass                
        document.write( "PASSED" )
}
else
    document.write( "NOT PASSED" )
}

怎么样

if ((read >= 410) && 
    (wri  >= 410) && 
    (math >= 410) && 
    (sci  >= 410) && 
    (soc  >= 410) &&
    (read+wri+math+sci+soc >= 2250)) {    
    document.write( "PASSED" )
} else {
    document.write( "NOT PASSED" )
}
function gedCheck(read, wri, math, sci, soc) {
    if( read < 0 || read > 1000 )
        read = 0;
    if( wri < 0 || wri > 1000 )
        wri = 0;
    if( math < 0 && math > 1000 )
        math = 0;
    if( sci < 0 && read > 1000 )
        read = 0;
    if( soc < 0 && soc > 1000 )
        soc = 0;
    var total = read + wri + math + sci + soc;
    if (read >= 410 && wri >= 410 && math >= 410 && sci >= 410 && soc >= 410 && total >= 2250)   {   
        document.write("PASSED");
    } else {
        document.write("NOT PASSED");
    }
}

整个第一部分都是不可能的代码。它正在检查一个数字是否同时小于零和大于1000。显然不可能,所以我把它改成了OR。

我还创建了一个total变量,您可以像检查其他变量一样检查它。

在这里使用数组将帮助您减少重复代码的数量

function gedCheck(read, wri, math, sci, soc) {
   var subjects, totalScore, averageScore;
   subjects = [read, wri, math, sci, soc];
   totalScore = 0;
   averageScore = 0;
   for (var i = 0; i < subjects.length; i++) {
       if (subjects[i] < 0 || subjects[i] > 1000) {
           subjects[i] = 0;
       }
       totalScore += subjects[i];
   };
   averageScore = totalScore / subjects.length;
   if (averageScore >= 450 || totalScore >= 2250) {
       document.write("PASSED");
   } else {
       document.write("NOT PASSED");
   }
}

第一个循环遍历每个主题,必要时将其设置为零,然后将其添加到总分变量中。

然后将总分除以受试者的数量。

然后,如果平均得分等于或大于450,或等于或大于2250,则通过。

最新更新