Orki: Einheitenumrechner

Hallo Leute,

ich bin noch Anfänger was JavaScript angeht, deshalb bitte nicht lachen wenn Ihr mein Code unten seht. ;)

Ich möchte einen Einheitenumrechner mit JavaScript programmieren, habe da aber große Schwierigkeiten. Wenn der Nutzer eine Zahl bei der gewünschten Einheit eingibt soll dies immer in Gramm umgerechnet werden und von da aus in alle anderen Einheiten. Ich weiß nicht genau, wie ich dies realisieren soll.

Mein Code bis jetzt (funktioniert natürlich nicht):

<script>
function convertWeight() {
document.getElementById('mg').value = '0.001';
document.getElementById('g').value = '1';
document.getElementById('kg').value = '1000';
}
</script>

<form>
<table border=1 cellpadding=2 cellspacing=0>
<tr><td>mg</td><td><input type="number" name="mg" id="mg" onchange="convertWeight(mg);"></td></tr>
<tr><td>g</td><td><input type="number" name="g" id="g" onchange="convertWeight(g);"></td></tr>
<tr><td>kg</td><td><input type="number" name="kg" id="kg" onchange="convertWeight(kg);"></td></tr>
</table>
</form>

  1. Hallo Orki,

    die Idee der Funktion einen Parameter zu übergeben ist schon richtig. Aber bisher überbibst Du hier eine nicht weiter definierte Variable. Ich hab mal ein wenig in Deinem Code rumgeschoben. Die If-Abfragen kann man sicher noch um 3-4 Zeilen kompakter gestalten. Schau doch mal, ob Du mir folgen kannst.

    Liebe Grüße,
    Jankobert

      
    function convertWeight(Ausgangswert) {  
      if (Ausgangswert === 'mg') {  
        document.getElementById('g').value = document.getElementById('mg').value * 0.001;  
        document.getElementById('kg').value = document.getElementById('mg').value * 0.000001;  
      }  
      if (Ausgangswert === 'g') {  
        document.getElementById('mg').value = document.getElementById('g').value * 1000;  
        document.getElementById('kg').value = document.getElementById('g').value * 0.001;  
      }  
      if (Ausgangswert === 'kg') {  
      document.getElementById('mg').value = document.getElementById('kg').value * 1000000;  
      document.getElementById('g').value = document.getElementById('kg').value * 1000;  
      }  
    }  
    </script>  
      
    <form>  
    <table border=1 cellpadding=2 cellspacing=0>  
    <tr><td>mg</td><td><input type="number" name="mg" id="mg" onchange="convertWeight('mg');"></td></tr>  
    <tr><td>g</td><td><input type="number" name="g" id="g" onchange="convertWeight('g');"></td></tr>  
    <tr><td>kg</td><td><input type="number" name="kg" id="kg" onchange="convertWeight('kg');"></td></tr>  
    </table>  
    </form>  
    
    
    1. Hallo Jankobert,

      danke für Deine Hilfe! Das Script funktioniert jetzt. Aber wenn bei Milligramm der Wert vom Nutzer bspw. auf 9 gesetzt wird, springt der Wert bei Gramm auf 0,009000000000000001. Warum ist das so?

      MfG,
      Orki

      1. Meine Herren!

        danke für Deine Hilfe! Das Script funktioniert jetzt. Aber wenn bei Milligramm der Wert vom Nutzer bspw. auf 9 gesetzt wird, springt der Wert bei Gramm auf 0,009000000000000001. Warum ist das so?

        Das hat mit JavaScripts interner Repräsentation von Zahlen zu tun, JavaScript rechnet nämlich intern immer mit Floating-Point Arithmetik. Das heißt zum Einen, dass JavaScript manche Zahlenwerte einfach nicht annehmen kann und zum anderen, dass Rechenoperationen nicht völlig exakt laufen.

        9 * 000.1 === 0.009000000000000001; // true  
          
        9 / 1000 ===  0.009; // true  
          
        Number.MAX_VALUE === Number.MAX_VALUE - 1; // true
        
        --
        “All right, then, I'll go to hell.” – Huck Finn