Problem mit Rechnen und einer Abfrage

Kerwin

Erfahrenes Mitglied
Ich habe da ein kleines Problem, besser gesagt 2.

Ersteinmal die Thematik. Ich will ein Formular basteln, welches ein Kunde ausfüllen kann. Das Formular soll während der Eingabe auch gleich den Gesamtpreis mit anzeigen.

Problem 1:
Immer wenn ich das erste Modul mit dem Faktor 9.99 multipliziere(Anzahl *9.99) geht soweit alles gut. Wenn ich aber das noch mit dem zweiten Modul addiere(Gesamtpreis), dann entsteht immer so eine lange Zahl wie 24.9900000002 und das, obwohl ich nur 1*9.99 + 15 rechne.

Problem 2:
Das zweite Modul soll ein Select Feld werden. Wenn dieses auf Ja steht, soll zu dem Preis 20€ hinzuaddiert werden, wenn Nein, dann 0 Euro. Spasseshalber habe ich den Elsezweig(Im Falle Nein) mal 15€ hinzugefügt und da entsteht dann Problem nummer 1. Wenn ich auf 0 mache gehts allerdings. Nur ich stelle die Frage gleich mit falls ich an einer anderen Stelle mal so ein Problem habe.

Ich bedanke mich schon einmal im vorraus

Hier der bisherice Code
Code:
<html>
<head>
<title>Test</title>

<script type="text/javascript">
<!--
  function get_subpages(){
  	return document.Test.subpages.value * 9.99; /* Produkt A */
  }
  function get_logo(){
  	if(document.Test.logo.value==true){
  	  return 20;
  	}else{
  	  return 15;
  	}
  }
  
  
  function Summe(){
    document.Test.summe.value =   get_subpages() + get_logo();
  }
// -->
</script>

</head>
<body bgColor="#FF7F00">

  <form action="formular.php" method="POST" name="Test">
    <table width="70%" cellpadding="1" cellspacing="1">
      <tr>
        <td>Unterseiten je +9.99€</td>
        <td><input type="text" id="form[subpages]" maxLength="3" size="10" name="subpages" onKeyup="Summe()"></td>
      </tr>
      <tr>
        <td>Logo +24.90€</td>
        <td><select name="logo">
              <option value="true" selected>Ja</option>
              <option value="false">Nein</option>
            </select>
        </td>
      </tr>           
      <tr>
        <td>Summe</td>
        <td><input type="text" name="summe" value="0" readonly></td>
      </tr>  
    </table>    
  </form> 
</body>
</html>
 
PHP:
document.Test.summe.value =   Math.round((get_subpages() + get_logo()) * 100) / 100;
oder
PHP:
document.Test.summe.value =   parseInt((get_subpages() + get_logo()) * 100) / 100;
sollte helfen (wenn 2 Nachkomastellen gewünscht sind). Da Dezimalzahlen intern im Binärformat berechnet werden, können Rundungsfehler schon mal auftreten (hängt u.A. damit zusammen, dass sich bei weitem nicht alle Dezimalzahlen exakt in Binärzahlen mit Nachkommateil umrechnen lassen -> z.B. 0,2)

Gruß
 
Super, dank dir, Problem 1 ist damit gelöst.

Kann mir noch jemand kurz weiterhelfen mit Problem 2? Also das Select Feld welches ich abfragen will und wenn "Ja" gewählt ist, dass JS dann summe +20 rechnen soll.
 
äh. Was genau ist denn Dein Problem Nr. 2?
Wenn ich auf 0 mache gehts allerdings
Das klang für mich danach, als würde es (abgesehen von dem Rundungsfehler) funktionieren... :rolleyes:

Gruß

P.S.: Wenn es an der Abfrage (true/false) hängt: versuch es mit Strings oder evaluiere die Value:
PHP:
if (meinForm.meinSelect.value =="true");
...
// oder:
if (eval(meinForm.meinSelect.value) == true);
...
 
Zuletzt bearbeitet:
Sorry, hab mich da bissel blöd ausgedrückt.

Jedenfalls funktioniert es, bix thx

Hier noch einmal der vollständige Code für diejenigen die es interessiert
Code:
<html>
<head>
<title>Test</title>

<script type="text/javascript">
<!--
  function get_subpages(){
  	return document.Test.subpages.value * 9.99; /* Produkt A */
  }
  function get_logo(){
  	if (Test.logo.value =="true")
  	  return 24.90;
  	else
  	  return 0;
   }
  
  
  function Summe(){
    document.Test.summe.value =  Math.round((get_subpages() + get_logo()) * 100) / 100;
 

  }
// -->
</script>

</head>
<body bgColor="#FF7F00">

  <form action="formular.php" method="POST" name="Test">
    <table width="70%" cellpadding="1" cellspacing="1">
      <tr>
        <td>Unterseiten je +9.99€</td>
        <td><input type="text" id="form[subpages]" maxLength="3" size="10" name="subpages" onKeyup="Summe()"></td>
      </tr>
      <tr>
        <td>Logo +24.90€</td>
        <td><select name="logo" onChange="Summe()">
              <option value="true"  selected>Ja</option>
              <option value="false">Nein</option>
            </select>
        </td>
      </tr>           
      <tr>
        <td>Summe</td>
        <td><input type="text" name="summe" value="0" readonly></td>
      </tr>  
    </table>    
  </form> 
</body>
</html>
 
Da bin leider schon wieder mit einem Neuen Problem. Wenn ich alles per Select felder mache, es einwandfrei, nun habe ich mir jedoch überlegt gehabt das mit radio buttions zu basteln.
Und da gibt es leider ein kleines Problem. Wenn beim Radio auf Ja oder Nein klicke, dann ändert sich die Gesamtsumme dementsprechend korrekt. Wenn ich aber in dem Inputfeld daürber etwas ändern will(die Anzahl von XY), dann wäre es so, als ob der Radio gar nicht mehr aktiv ist obwohl er checked ist.

Hier einmal kurz der Code
Code:
<html>
<head>
<script type="text/javascript">
<!--
  function get_subpages(){
  	return document.Test.subpages.value * 10;
  }
  function get_logo(){
  	if (document.Test.logo[1].checked)return 20;
  	else return 0;
   }   

  function Summe(){
    document.Test.summe.value =  Math.round((  get_subpages() + get_logo() ) * 100) / 100;
  }
// -->
</script>

</head>
<body bgColor="#FF7F00">
<center>  
      <form action="formular.php" method="POST" name="Test">
        <table width="70%" cellpadding="1" cellspacing="1">       
          <tr>
            <td>Unterseiten je +10€</td>
            <td><input type="text" name="subpages" onKeyup="Summe()" maxlength="3" size="5"></td>
          </tr>
          <tr>
            <td>Logo +20€</td>
            <td><INPUT type="radio" name="logo" value="true" onChange="Summe()" checked>Ja &nbsp;&nbsp;&nbsp;
                <INPUT type="radio" name="logo" value="false" onChange="Summe()">Nein
            </td>
          </tr>
          </tr>
          <tr>
        	<td>Summe</td>
        	<td><input type="text" name="summe" value="<?=$summe?>" readonly></td>
      	  </tr>                              
    	</table>    
      </form> 
  </body>
</html>
 
hab den Fehler gefunden. Bei den Inputfeldern geht die Methode "onChange" nicht. Hab da einfach mal onClick rein geballert und es wunderbar.
 

Neue Beiträge

Zurück