Un errore lo hai gia` trovato, il secondo devi organizzare la caccia grossa. Ti do lo strumento, poi lascio usarlo come piu` ti piace:
codice:
 ...
    // calcola valore totale
    var tot = 0;
    for(var i=1; i<2; i++) { // al posto di 2 metti l n. max
      var sub = f.elements["subtot"+i].value;
      if(sub == "") sub = 0;
      tot += parseFloat(sub);
    }
    alert("il totale e` "+tot);
    // formatta con due decimali il campo totale
    stringatot = new String(Math.round(tot*100)/100);
    stringatot += (stringatot.indexOf(".")<0)?'.00':'00';
    stringatot = stringatot.substr(0,stringatot.indexOf(".")+3);
    alert("il totale e` diventato "+tot);
    f.totale.value = stringatot;
  }
}
Ho anche corretto una parentesi nella riga del round ed aggiunto il value al sub oltre ad un controllo del campo vuoto (che pero` potrebbe non servire).