Hallo akuep,
ich denke, der von Jürgen verlinkte Wiki-Artikel sollte Dir helfen, dein Entscheidungsproblem zu lösen.
Allerdings...
Der erste "case" funktioniert, die weiteren nicht mehr.
Erzähle bitte keine Märchen. Der erste Case funktioniert auch nicht.
parseFloat(form1.elements.value01.value) = wert1;
ist ein Fehler (in der Browserkonsole siehst Du die Meldung, dass ein ReferenceError nicht "gefangen" worden sei). Ich denke, du hast einfach blindlings das Auslesen der Werte aus den input-Elementen irgendwoher kopiert, ohne es zu verstehen.
form1.elements.value01
- ist das input-Element mit
name="value01"
im Formform1
. form1.elements.value01.value
- ist der Inhalt der
value
-Eigenschaft dieses Elements, in Form einer Zeichenkette. Dieser Eigenschaft kann man auch etwas zuweisen. parseFloat(...)
- ist der Aufruf der Funktion
parseFloat
. Sie wandelt eine Zeichenkette nach bestem Können in eine Zahl um. An das Ergebnis eines Funktionsaufrufs kann man aber nichts zuweisen.
Was funktioniert, ist:
form1.elements.value01.value = input_value * faktor;
Jedenfalls so halbwegs. Hier müsste eigentlich eine brauchbare Rundung erfolgen. Was "brauchbar" ist, hängt auch von den Umrechnungsfaktoren ab. Wenn ich mit 0.00004403 multipliziere, sind vermutlich 8 Nachkommastellen signifikant. Natürlich ist die Frage, ob es sinnvoll ist, Millimeter in Meilen umzurechnen oder sowas… Einfaches Runden geht mit toFixed:
form1.elements.value01.value = (input_value * faktor).toFixed(8);
rundet auf 8 Nachkommastellen, bzw. füllt mit Nullen auf 8 Stellen auf.
Im Übrigen würde ich Dir empfehlen, auf den case zu verzichten und ein Array mit Umrechnungsfaktoren zu verwenden. Was ich Dir aber, damit Du es verstehst, 1:1 vorkauen müsste und damit dein Abschreibebegehren erfüllen würde. Nö. Tu ich nicht.
Rolf
sumpsi - posui - obstruxi