javascript中五个值的平均值

时间:2013-02-19 19:20:16

标签: javascript average

我在特许学校工作,而我只是在学习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>

这似乎是正确地从各个数据库字段中检索值,因为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” ?

4 个答案:

答案 0 :(得分:0)

怎么样?
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" )
}

答案 1 :(得分:0)

要获得平均值,您需要这样做:

(((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" )
}

答案 2 :(得分:0)

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。

我还创建了一个总变量,您可以像查看其他所有内容一样进行检查。

答案 3 :(得分:0)

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

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,则通过。