Rechner Umwandeln von JavaScript in PHP

Snodri

Mitglied
Hallo miteinander,

hab einen Umrechner diverser Einheiten in JS laufen und muss den auf PHP umwandeln. Was muss ich ändern, dass das läuft ?

Hab folgendes gefunden: Programmieren mit PHP
Gibt es noch mehr zu beachten ?

Merci
Snodri
 
... das JS:
Code:
function ClearForm(form)
{
for (var i="0"; i<form.elements.length; i++) 
 {
 if (form.elements[i].type=="text")
  {
  form.elements[i].value="";
  }
 }
}


function Round(Zahl,Stellen)
{
// Komma durch Punkt ersetzen
var komma=",";
var dot=".";

for (var i=0; i<Zahl.length; i++) 
 {
 if (Zahl.substring(i,i+komma.length) == komma) 
  {
  Zahl = Zahl.substring(0,i)+dot+Zahl.substring(i+komma.length,Zahl.length);
  }
 }
//auf Zahl überprüfen und gegebenenfalls runden - 
//(nicht runden Stellen=0)
if (isNaN(Zahl))
 {
 alert ("Bitte geben Sie nur Zahlen ein !");
 rounded="Fehler";
 return rounded;
 }
else
 {
 var S;
 var rounded;
 Zahl=parseFloat(Zahl);
 if (Stellen==1){S=10;}
 if (Stellen==2){S=100;}
 if (Stellen==3){S=1000;}
 if (Stellen==4){S=10000;}
 if (Stellen>0)
  {
  Zahl=Zahl*S;
  Zahl=Math.round(Zahl);
  rounded=Zahl/S;
  }
 else
  { 
  rounded=Zahl;
  }
 return rounded;
 }
}

// Druckeinheiten Converter
function Cal_Press(form)
{
var Wert=window.document.CalPress.InputPress.value;
var Faktor=window.document.CalPress.UnitP.options[window.document.CalPress.UnitP.selectedIndex].value;
// Faktoren für die Umrechnung in bar
var Pa="100000";
var PSI="14.50377";
var KPcm="1.01971";
var atm="0.98692";
var Torr="750.0617";
var mmWS="10197.1621";
var InWS="401.4631";
var hPa="1000";
var kPa="100";

Wert=Round(Wert,"0");
if (Wert=="Fehler")
 {
 ClearForm(form)
 }
 
// Eingabe in bar umrechnen 
Faktor=parseFloat(Faktor);
var barWert=Wert*Faktor;
if (barWert<-1)
 {
 alert ("Das absolute Vacuum liegt bei -1 bar !")
 }
else
 {
 // Ausgabe
 if (isNaN(Wert)==false)
  {
  window.document.CalPress.Out_bar.value=   Round(barWert,4);
  window.document.CalPress.Out_Pa.value=  Round(barWert*Pa,4);
  window.document.CalPress.Out_PSI.value=   Round(barWert*PSI,4);
  window.document.CalPress.Out_KPcm.value= Round(barWert*KPcm,4);
  window.document.CalPress.Out_atm.value=   Round(barWert*atm,4);
  window.document.CalPress.Out_mmWS.value= Round(barWert*mmWS,4);
  window.document.CalPress.Out_inchWS.value=Round(barWert*InWS,4);
  window.document.CalPress.Out_Torr.value= Round(barWert*Torr,4);
  window.document.CalPress.Out_hPa.value=  Round(barWert*hPa,4);
  window.document.CalPress.Out_kPa.value=  Round(barWert*kPa,4);    
  }
 }
}
... die Ausgabe
Code:
 <script language="JavaScript" type="form"> ClearForm();</script>
 <script language="JavaScript" type="form"> Cal_Press();</script>
 <script language="JavaScript" type="this.form"> ClearForm();</script>

    <form name="CalPress">
   <table summary="" border="3" bgcolor="#f0f8ff" cellpadding="0" cellspacing="0" width="75%">
    <tr>
    <td align="center">
     <table summary="" border="0" cellpadding="0" cellspacing="0" class="form">
     <tr>
     <td valign="middle" height="50" class="form" width="20">&nbsp;</td>
     <td valign="middle" height="50" class="form" colspan="2">
      <input name="InputPress" type="text" onchange="Cal_Press(this.form)"  onfocus="ClearForm(this.form)">
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      <select name="UnitP" style="width:120px;">
        <!-- onchange="Cal_Press()" -->
        <option value="1" selected="selected">bar oder daN/cm²</option>
        <option value="0.00001">Pa oder N/m²</option> 
        <option value="0.0689475">PSI oder leb/in²</option>
        <option value="0.0013332">mmHg oder Torr</option>
        <option value="0.00009807">mm WS</option>
        <option value="0.002491">inch WS</option>
        <option value="0.98066">kp/cm² oder at</option>
        <option value="1.01325">atm</option>
      </select></td>
      <td valign="middle" height="50" class="Form" width="20">&nbsp;</td>
    </tr>
    <tr>
     <td valign="middle" class="form" height="50">&nbsp;</td>
     <td valign="middle" class="form" height="50" colspan="2" align="center">
      <input type="button" name="Button" class="button" value="Berechnen" onclick="Cal_Press(this.form)"></td>
     <td valign="middle" class="form" height="50">&nbsp;</td>
    </tr>
        <tr>
      <td valign="top" class="form">&nbsp;</td>
     <td valign="top" class="form">
      entsprechen : <br><br>
      <input class="ausgabe" type="text" name="Out_bar"    readonly="readonly">&nbsp;bar<br>
      <input class="ausgabe" type="text" name="Out_Pa"     readonly="readonly">&nbsp;Pa<br>
      <input class="ausgabe" type="text" name="Out_PSI"    readonly="readonly">&nbsp;PSI<br>
      <input class="ausgabe" type="text" name="Out_Torr"   readonly="readonly">&nbsp;mmHg&nbsp;&nbsp;<br><br>
      <input class="ausgabe" type="text" name="Out_hPa"    readonly="readonly">&nbsp;hPa<br>
     <td valign="top" class="form"><br><br>
      <input class="ausgabe" type="text" name="Out_mmWS"   readonly="readonly">&nbsp;mm WS<br>
      <input class="ausgabe" type="text" name="Out_inchWS" readonly="readonly">&nbsp;inch WS<br>
      <input class="ausgabe" type="text" name="Out_KPcm"   readonly="readonly">&nbsp;kp/cm²<br>
      <input class="ausgabe" type="text" name="Out_atm"    readonly="readonly">&nbsp;atm<br><br>
      <input class="ausgabe" type="text" name="Out_kPa"    readonly="readonly">&nbsp;kPa <br>&nbsp;</td>
     <td valign="top" class="Form">&nbsp;</td>
    </tr>
     </table>
     </td>
   </tr>
   </table>
   </form>
Muss die Ausgabe an das neue Layout anpassen und wird dadurch noch überarbeitet. Zur Funktionsprüfung das alte geliefert.

Servus
 
Zuletzt bearbeitet:
Die Dinge die auf der Seite stehen auf der du warst sind schonmal das wesentlich, sowas wir Variabeln mit $ deklarieren. Du musst natürlich auch bestimmte Funktionen anpassen. Sowas wie "Alert" gibt's glaub ich gar nicht in Php. Vielleicht kann dir jemand anders besser helfen. Ich kann kaum Javascript.
 
Nachdem ich mich mit JS nicht auskenne bin versuchte ich die Funktionen die da ablaufen festzustellen. Dann versuchte ich dies in PHP umzusetzen. Kann jetzt nicht sagen, ob ich was vergessen hab ...

Folgende Fragen sind dabei aber aufgetaucht:
? Wie wird gewährleistet, dass erst ganz zum Schluss gerundet wird, d.h. bei den Zwischenschritten soll er so viele Nachkommastellen benutzen wie benötigt wird um Ungenauigkeiten zu vermeiden. Erst vor der Ausgabe dann auf 4 Stellen kürzen / runden.

? Wie werden mir in der Ausgabe gundsätzlich 4 Nachkommastellen angezeigt. Auch wenn der Wert z.B. 100,0 ist.

? Ist mir sonst noch ein gravierender Fehler unterlaufen

Merci Snodri

Code:
<?
 // Komma durch Punkt ersetzen
 $wert = str_replace (",",".", $wert);
 // Faktoren für die Umrechnung in hPa
   $Pa = "0.01";
  $bar = "1000.0";
  $hPa = "1";
 // Faktoren zur Umrechnung von hPa in andere Druckeinheiten
   $druck_Pa = "100.0";
  $druck_bar = "0.0010000";
   $druck_at = "0.0010200";
  $druck_atm = "0.0009869";
 $druck_mmHG = "0.7500600";
 $druck_mmWS = "10.1971000";
 $druck_InWS = "0.4014700";
  $druck_PSI = "0.0145000";

 //Deklarieren der Variablen
 switch($druck)
 {
  case "a":
   $zahl = $wert * $Pa;             // Pa in hPa umwandeln
   break;
  case "b":
   $zahl = $wert * $bar;            // bar in hPa umwandeln
   break;
  case "c":
   $zahl = $wert * $hPa;            // hPa in hPa umwandeln
   break;
 }
   // einzelne Druckeinheiten ausrechnen
   $druck01 = bcmul($zahl, $druck_Pa,10);    // Wert Pa
   $druck02 = bcmul($zahl, $druck_bar,10);   // Wert bar
   $druck03 = bcmul($zahl, $druck_at,10);    // Wert at, KPcm
   // Punkt in Komma umwandeln
   $druck01 = str_replace (".",",", $druck01);
   $druck02 = str_replace (".",",", $druck02);
   $druck03 = str_replace (".",",", $druck03);
?>

... sowie die Ausgabe
<form action="de_rechner2.php" method="post">
 <table summary="" class="cross" border="1">
  <tr>
   <td class="form" colspan="3">
    <input class="abstand2" name="wert" type="text" size="20">
    <select class="abstand2" name="druck" style="width:140px;">
      <option value="a">Pa</option>
      <option value="b">bar</option> 
      <option value="c">hPa / mbar</option> 
    </select>
     <input class="button abstand2" name="submit" type="submit" value="berechnen">
   </td>
  </tr>
  <tr align="right">
<? 
 echo "<td>Pa<br>bar<br>hPa</td> <td>$druck01 <br>$druck02<br>$druck03</td>";
?>
   <td class="" width="50%">&nbsp;</td>
  </tr>
 </table>
</form>
 
Hallo,

vom Code her ist soweit alles in Ordnung.
Aber was meinst du mit der Frage, dass erst am Ende gerundet werden soll?

Und noch eine Frage:
Wozuist dieser Teil des Codes?
PHP:
  $druck_Pa = "100.0";
  $druck_bar = "0.0010000";
   $druck_at = "0.0010200";
  $druck_atm = "0.0009869";
 $druck_mmHG = "0.7500600";
 $druck_mmWS = "10.1971000";
 $druck_InWS = "0.4014700";
  $druck_PSI = "0.0145000";
 
Zuletzt bearbeitet:
In der endgültigen Version sollten nicht nur 3 Auswahleinheiten zur Verfügung stehen, sondern mehr. Um die Berechnung zu Vereinfachen, wird die Einheit auf einen Standard umgerechnet.
Die Angabe $xy sind die Variablen die zur Umrechnung der gewünschten Druckeinheit (z.B. mmHg) in den Standard (hPa) benötigt werden.
Die Angabe $druck_xy sind die Variablen die benötigt werden um hPa in die einzelnen Einheiten umzurechnen. Somit kann z.B. aus mmHg auch atm werden.

Wegen Rundung:
Da die Variablen viele Kommastellen haben, kommen natürlich als Ergebnis viele Kommastellen raus. Diese sollten aber nicht schon bei der Umrechnung der Eingabe in Standard (1.Schritt) gerundet werden, sondern erst nach der Umrechnung von Standard in die neue Einheit (2. Schritt) um Rundungsfehler zu vermeiden.

Jetzt klar ?
Snodri
 
Zurück