Created
January 7, 2025 12:29
-
-
Save praul/0c38b12892b4aa6989e5c778d695a4ad to your computer and use it in GitHub Desktop.
PHP - Zahl in Worten - Number to words (german)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* Danke ChatGPT*/ | |
function zahlInWorten($num) { | |
if (!is_numeric($num)) { | |
return "Eingabe ist keine Zahl."; | |
} | |
$zahlen = [ | |
0 => "null", 1 => "eins", 2 => "zwei", 3 => "drei", 4 => "vier", | |
5 => "fünf", 6 => "sechs", 7 => "sieben", 8 => "acht", 9 => "neun", | |
10 => "zehn", 11 => "elf", 12 => "zwölf", 13 => "dreizehn", 14 => "vierzehn", | |
15 => "fünfzehn", 16 => "sechzehn", 17 => "siebzehn", 18 => "achtzehn", 19 => "neunzehn", | |
20 => "zwanzig", 30 => "dreißig", 40 => "vierzig", 50 => "fünfzig", | |
60 => "sechzig", 70 => "siebzig", 80 => "achtzig", 90 => "neunzig" | |
]; | |
$stufen = [ | |
1000 => "tausend", 1000000 => "Million", 1000000000 => "Milliarde" | |
]; | |
if ($num < 0) { | |
return "minus " . zahlInWorten(abs($num)); | |
} | |
if ($num < 20) { | |
return $zahlen[$num]; | |
} | |
if ($num < 100) { | |
$zehner = intval($num / 10) * 10; | |
$rest = $num % 10; | |
return $rest ? $zahlen[$rest] . "und" . $zahlen[$zehner] : $zahlen[$zehner]; | |
} | |
if ($num < 1000) { | |
$hunderter = intval($num / 100); | |
$rest = $num % 100; | |
// Sonderfall: "einhundert" statt "eins hundert" | |
$prefix = $hunderter === 1 ? "ein" : $zahlen[$hunderter]; | |
return $prefix . "hundert" . ($rest ? " " . zahlInWorten($rest) : ""); | |
} | |
foreach ($stufen as $schwelle => $name) { | |
if ($num < $schwelle * 1000) { | |
$basis = intval($num / $schwelle); | |
$rest = $num % $schwelle; | |
// Sonderfall für "eintausend" statt "eine tausend" | |
if ($schwelle === 1000) { | |
$prefix = $basis === 1 ? "ein" : zahlInWorten($basis); | |
} else { | |
$prefix = $basis === 1 ? "eine" : zahlInWorten($basis); | |
} | |
$plural = ($schwelle >= 1000000 && $basis > 1) ? "en" : ""; | |
return $prefix . " " . $name . $plural . ($rest ? " " . zahlInWorten($rest) : ""); | |
} | |
} | |
return "Zahl zu groß."; | |
} | |
// Beispiele | |
echo zahlInWorten(100); // Ausgabe: "einhundert" | |
echo "\n"; | |
echo zahlInWorten(1716); // Ausgabe: "eintausend siebenhundert sechzehn" | |
echo "\n"; | |
echo zahlInWorten(12345); // Ausgabe: "zwölftausend dreihundert fünfundvierzig" | |
echo "\n"; | |
echo zahlInWorten(1001); // Ausgabe: "eintausend eins" | |
echo "\n"; | |
echo zahlInWorten(1000000); // Ausgabe: "eine Million" | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment