JavaScriptsVerschiedenes

Zahlen übersetzen

Übersetzt jede ganze Zahl von 0 bis 100 in das englische Zahlwort — aus 42 wird forty-two.

Dieses Script übersetzt die Zahlen von 0 bis 100 ins Englische: Ihr tippt eine Zahl ein, und heraus kommt das passende englische Zahlwort. Aus 7 wird seven, aus 42 wird forty-two. Die Idee dazu stammt von unserem User david97. Praktisch ist das Script überall dort, wo Zahlwörter ausgeschrieben werden müssen — beim Vokabellernen, beim Ausfüllen englischsprachiger Formulare oder einfach zum Nachschlagen, wenn man sich bei der Schreibweise nicht sicher ist.

Die Bedienung ist denkbar einfach: Tragt in das Feld eine ganze Zahl zwischen 0 und 100 ein und klickt auf „Zahl übersetzen". Das Ergebnis erscheint direkt darunter. Die 5 ist als Beispiel schon vorbelegt, ihr könnt also sofort losklicken. Gebt ihr etwas ein, das keine Zahl von 0 bis 100 ist, weist euch das Script freundlich darauf hin, statt einen Fehler auszugeben.

Wissenswertes zu den englischen Zahlwörtern: Bis 20 hat jede Zahl ihr eigenes Wort, das man auswendig lernen muss. Von 21 bis 99 setzt sich das Wort aus Zehnern und Einern zusammen, verbunden durch einen Bindestrich — twenty-one, fifty-seven, ninety-nine. Anders als im Deutschen wird dabei zuerst der Zehner genannt: „einundzwanzig" heißt wörtlich umgedreht twenty-one. Vorsicht bei den Zahlen 13 bis 19: Sie enden auf -teen, aber nicht alle folgen dem Muster brav. 15 heißt fifteen (nicht „fiveteen"), 18 heißt eighteen (mit nur einem t), und 40 schreibt sich forty ohne das u aus four. Genau wegen solcher Ausnahmen arbeitet das Script mit einer festen Wortliste statt mit einer Rechenregel.

Wer Zahlen in andere Darstellungen umrechnen möchte, wird bei uns ebenfalls fündig: Der Umrechner römisch–dezimal macht aus 42 ein XLII, und die Umwandlung in Binärzahlen zeigt, wie ein Computer dieselbe Zahl sieht. Für lange Zahlen mit Tausenderpunkten gibt es die Zahl mit Trennpunkten. Und wer wissen will, welcher Buchstabe hinter welchem Zeichencode steckt, schaut in die Zeichentabelle.

Verschiedenes Baujahr 2007 läuft in deinem Browser

Das Script kennt die ganzen Zahlen von 0 bis 100.

Eingesandt von david97

So funktioniert das Script

Das Script besteht aus drei Bausteinen: zwei Tabellen mit den englischen Zahlwörtern, einer Funktion, die daraus das richtige Wort zusammensetzt, und einer Funktion, die das Eingabefeld ausliest und das Ergebnis anzeigt. Alles steckt in einer sofort ausgeführten Funktion, damit die Namen im Script nicht mit anderen Scripts auf derselben Seite kollidieren.

const einer = [
  "zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
  "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
  "sixteen", "seventeen", "eighteen", "nineteen"
];

Das ist ein Array — eine durchnummerierte Liste. Der Clou: Die Position in der Liste entspricht genau der Zahl. einer[0] ist "zero", einer[7] ist "seven", einer[15] ist "fifteen". Weil die Zählung bei 0 beginnt, passt das ohne jede Umrechnung. Die Zahlen von 0 bis 19 müssen so einzeln aufgelistet werden, denn im Englischen gibt es dort zu viele Ausnahmen, als dass man sie berechnen könnte.

const zehner = [
  "", "", "twenty", "thirty", "forty", "fifty",
  "sixty", "seventy", "eighty", "ninety"
];

Die zweite Liste funktioniert nach demselben Prinzip, nur zählt sie in Zehnerschritten: zehner[2] ist "twenty", zehner[9] ist "ninety". Die beiden leeren Zeichenketten am Anfang halten nur die Plätze 0 und 1 frei, damit die Nummerierung stimmt — für diese beiden Fälle ist ohnehin die erste Liste zuständig.

function uebersetze(x) {
  if (x === 100) {
    return "one hundred";
  }
  if (x < 20) {
    return einer[x];
  }
  const rest = x % 10;
  const zehnerwort = zehner[Math.floor(x / 10)];
  return rest ? zehnerwort + "-" + einer[rest] : zehnerwort;
}

Hier wird das Wort zusammengebaut, und zwar in drei Fällen. Die 100 ist ein Sonderfall und wird direkt beantwortet. Alles unter 20 steht fertig in der ersten Liste. Bleibt der Bereich 20 bis 99: Math.floor(x / 10) teilt durch zehn und schneidet die Nachkommastellen ab — aus 57 wird also 5, und zehner[5] ist "fifty". Der Rest-Operator % liefert den Rest der Division durch zehn, bei 57 also 7, und einer[7] ist "seven".

Die letzte Zeile nutzt den Bedingungsoperator ? :, eine Kurzform von if/else: Steht links von ? etwas Wahres — hier ein Rest ungleich null —, gilt der Ausdruck vor dem Doppelpunkt, sonst der dahinter. Bei 57 kommt so "fifty" + "-" + "seven" heraus, bei glatten 50 dagegen nur "fifty", ohne einsamen Bindestrich am Ende.

const x = parseInt(document.getElementById("zu-zahl").value, 10);

if (isNaN(x) || x < 0 || x > hoechstgrenze) {
  ausgabe.textContent =
    "Bitte tragt eine ganze Zahl zwischen 0 und " + hoechstgrenze + " ein.";
  return;
}

Ein Eingabefeld liefert immer Text, niemals eine Zahl. parseInt() macht daraus eine ganze Zahl und wirft Nachkommastellen weg; die 10 als zweiter Wert sagt, dass im Zehnersystem gerechnet wird. Steht im Feld gar keine Zahl, kommt der Sonderwert NaN heraus — „not a number" —, den isNaN() erkennt. Zusammen mit den beiden Bereichsprüfungen fängt das jede unsinnige Eingabe ab; return beendet die Funktion dann sofort, ohne zu übersetzen.

ausgabe.innerHTML = x + " heißt auf Englisch <strong>" + uebersetze(x) + "</strong>.";

document.getElementById("zu-uebersetzen").addEventListener("click", anzeigen);

Der fertige Satz wird per innerHTML in die Ergebnisfläche geschrieben — so darf das englische Wort in <strong>-Tags stehen und erscheint hervorgehoben. Die letzte Zeile verbindet den Knopf mit der Funktion: addEventListener("click", …) sorgt dafür, dass bei jedem Klick anzeigen() läuft. Das Script steht deshalb unter dem Formular — nur so existieren Feld und Knopf bereits, wenn es ausgeführt wird.

Zum Anpassen: Die beiden Wortlisten könnt ihr durch die Zahlwörter einer anderen Sprache ersetzen — für Französisch oder Spanisch reicht das schon fast, nur die Bindestrich-Regel in der letzten Zeile von uebersetze() müsstet ihr an die jeweilige Schreibweise anpassen. Die Obergrenze steckt in hoechstgrenze; wollt ihr nur bis 20 übersetzen, ändert ihr dort die Zahl. Nach oben lässt sich die Grenze allerdings nicht einfach verschieben, denn für Hunderter und Tausender bräuchte uebersetze() weitere Regeln.

Script für die eigene Homepage

Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.

Mehr aus der Kategorie Verschiedenes