<script>
  var par=new Array();
  par[par.length]=new Array(100,4);
  par[par.length]=new Array(200,3);
  par[par.length]=new Array(1000,2);
  par[par.length]=new Array(2000,1.5);
  par[par.length]=new Array(5000,0.8);
  par[par.length]=new Array(10000,0.4);
  var yv=0.1;
  function getfee(count){
  //返回单位为万元
    var ret=0;
    for(var i=0;i<par.length;i++){
      var d=(i==0)?par[i][0]:(par[i][0]-par[i-1][0]);
      if(count>=d){
          ret+=d*par[i][1]/1000.0;count-=d;
      }else{
          ret+=count*par[i][1]/1000.0;
          return ret;
      }
    }
    ret+=count*yv/1000.0;
    return ret;
  }
  alert(getfee(180));//返回单位为万元
</script>

解决方案 »

  1.   

    为了避免浮点数运算的误差,可以把中间过程转化为整数运算,最后一步除以10000
    <script>
      var par=new Array();
      par[par.length]=new Array(100,40);
      par[par.length]=new Array(200,30);
      par[par.length]=new Array(1000,20);
      par[par.length]=new Array(2000,15);
      par[par.length]=new Array(5000,8);
      par[par.length]=new Array(10000,4);
      var yv=0.1;
      function getfee(count){
        var ret=0;
        for(var i=0;i<par.length;i++){
          var d=(i==0)?par[i][0]:(par[i][0]-par[i-1][0]);
          if(count>=d){
              ret+=d*par[i][1];count-=d;
          }else{
              ret+=count*par[i][1];
              return ret/10000.0;
          }
        }
        ret+=count*yv;
        return ret/10000.0;
      }
      alert(getfee(5000));//返回单位为万元
    </script>
      

  2.   


    To cxz7531(大花猫) ,我依照你提供的帮助,成功地解决了好几个相似的问题。现在出现一个新的记费方式,如下表。<1000元                       50元
    1001元-5000元               200元
    5001元-10000元              500元
    10001元-50000元             1000元
    50001元-100000元            2000元
    100001元-500000元             2%
    500001元-1000000元          1.50%
    1000001元-5000000元           1%
    5000001元-10000000元        0.80%
    >10000000元                  0.50%我用你给的程序改装了一个早上,还是没有得出正确的结果,还要麻烦你再出手一把,不胜感激。
      

  3.   

    你就不会变通一下?就是下面这样 应该没有问题
    <script>
      var par=new Array();
      par[par.length]=new Array(1000,50,true);
      par[par.length]=new Array(5000,200,true);
      par[par.length]=new Array(10000,500,true);
      par[par.length]=new Array(50000,1000,true);
      par[par.length]=new Array(100000,2000,true);
      par[par.length]=new Array(500000,2,false);
      par[par.length]=new Array(1000000,1.5,false);
      par[par.length]=new Array(5000000,1,false);
      par[par.length]=new Array(10000000 ,0.8,false);
      var yv=0.5;
      function getfee(count){
        var ret=0;
        for(var i=0;i<par.length;i++){
          var d=(i==0)?par[i][0]:(par[i][0]-par[i-1][0]);
          if(count>=d){
              ret+=(par[i][2])?par[i][1]:(d*par[i][1]/100.0);count-=d;
          }else{
              ret+=(par[i][2])?par[i][1]:(count*par[i][1]/100.0);
              return ret;
          }
        }
        ret+=count*yv/100.0;
        return ret;
      }
      alert(getfee(180));
    </script>
      

  4.   

    谢谢你cxz7531(大花猫) 你批评得是,
    时间特别紧,我也变(没有通)了一早上,没有搞定,这于自身水平臭也是分不开的,所以
    才继续麻烦你。
    SORRY 并 谢谢。