Summen in Buchstaben ausgeben

Johnnii360

Erfahrenes Mitglied
Grüsst euch,

war schon lange nicht mehr hier. ;)

Nun denn zu meinem Problem:

Ich habe mir ein Script gebastelt, mit dem ich an meine Kunden bei eBay, eine E-Mail mit all meinen Daten, inkl. des Preises und der Versandkosten schicken kann.
Da es manchmal aber Probleme mit der Summierung gibt, sprich, aus z.B. 10.90 EUR kein 10.90 EUR sondern 10.9 EUR wird, möchte ich zusätzlich noch die Summe in Buchstaben ausdrücken. Beispiel: 10.90 EUR > ZEHN euro und NEUNZIG cent

Ich habe echt keine Ahnung wie ich dies machen kann.

Würde mich über jede Hilfe sehr freuen.

Danke bereits im Voraus. :)
 
Also in Buchstaben ausgeben stell ich mir im Moment schwierig vor, hab ich auch keinen Ansatz.
Aber mit [phpf]number_format[/phpf] wird aus 10.9 eine 10,90!
Vielleicht ist das Problem damit erledigt.
 
Das ehrt mich natürlich! Allerdings ist beides diesselbe Funktion. :D
Wenn dein Problem gelöst ist, klick bitte unten rechts auf "erledigt", danke!
 
Das Thema ist zwar nun erledigt, aber bevor ich mir die Arbeit umsonst gemacht habe, poste ich es nochmal, vielleicht kann es jemand gebrauchen:
PHP:
<?
$zahl=(empty($_GET['zahl'])?0.0:$_GET['zahl']);
$zahl = str_replace(",",".",$zahl);
echo '<form action="'.basename($_SERVER['PHP_SELF'])
    .'" method="get">';
echo '<input type="text" name="zahl" value="'
    .$zahl.'">';
echo '<input type="submit"></form>';
echo '<small>Nur bis 2 Nachkommastellen.';
echo 'Zahl muss positiv und kleiner eine '
    .'Million sein.</small></br></br>';


function textIt($zahl,$suffix="") {
    if ($zahl < 0) {
        return "Fehler: Zahl muss gr&ouml;&szlig;er, gleich 0 sein.";
    }
    if ($zahl >= 1000000) {
        return "Fehler: Zahl muss kleiner 1000000 sein.";
    }

    if ($zahl != floor($zahl)) {
        return textIt(floor($zahl))." Komma ". textIt(($zahl * 100) % 100);
    }

    $texte = array(
            0=>array("","ein","zwei","drei","vier","f&uuml;nf",
                "sechs","sieben","acht","neun"),
            1=>array("","zehn","zwanzig","drei&szlig;ig","vierzig",
                "f&uuml;nfzig","sechzig","siebzig","achzig",
                "neunzig")
        );

    $special = array (0=>($zahl==0)?"null":"",
        1 => empty($suffix)?"eins":"ein",
        11=>"elf",
        12=>"zw&ouml;lf",
        13=>"dreizehn",
        14=>"vierzehn",
        15=>"f&uuml;nfzehn",
        16=>"sechzehn",
        17=>"siebzehn",
        18=>"achzehn",
        19=>"neunzehn");

    $zahlSplit=array();

    $einer = $zahl % 100;
    $hunderter = ($zahl % 1000 - $zahl % 100) / 100;
    $tausender = ($zahl % 1000000 - $zahl % 1000) /1000;

    $s="";
    //kleiner hundert:
    if (isset($special[$einer])) {
        $s.=$special[$einer].$suffix;
    } else if ($einer < 10) {
        $s.=$texte[0][$einer].$suffix;
    } else {
        $s.=$texte[0][$einer % 10].((($einer % 10)!=0)?"und":"")
            .$texte[1][($einer - $einer % 10)/10].$suffix;
    }
    //hunderter:
    if ($hunderter>0) {
        $s = textIt($hunderter,"hundert").$s;
    }
    //tausender:
    if ($tausender>0) {
        $s = textIt($tausender,"tausend").$s;
    }
    return $s;
}

echo "<b>".$zahl.": ".textIt($zahl)."</b>";
?>
Da mit floor und modulo gearbeitet wird, könnte es dazu kommen, dass falsche Zahlen entstehen, also auf jeden Fall noch mal testen.
Bei einer Million hatte ich dann auch keine Lust mehr, da sich dann schon wieder die Schreibweise ändert.
Negative Zahlen sind nicht erlaubt.
Es wird von zwei Nachkommastellen ausgegangen.
Texte und vor allem Leerzeichen sollte jeder nach eigenen Ideen anpassen, vor allem, wenn er mehr Ahnung davon hat, als ich.

Gruß hpvw
 
Zuletzt bearbeitet:
Ähm:
PHP:
    if ($zahl < 0) {
        return "Fehler: Zahl muss kleiner 1000000 sein.";
soll wohl
PHP:
    if ($zahl > 1000000) {
        return "Fehler: Zahl muss kleiner 1000000 sein.";
heißen, oder?
 
Ceraph hat gesagt.:
Ähm:
PHP:
    if ($zahl < 0) {
        return "Fehler: Zahl muss kleiner 1000000 sein.";
soll wohl
PHP:
    if ($zahl > 1000000) {
        return "Fehler: Zahl muss kleiner 1000000 sein.";
heißen, oder?
Uups, Cut'n'Paste.
Danke für den Hinweis, habe ich oben korrigiert.

Freue mich über weitere Fehler.

Gruß hpvw
 
Sauber Arbeit.

Ich versuche gerade zu verstehen, wie das Script funktioniert, und stoß schon bei der ersten Zeile auf eine Frage:
$zahl=(empty($_GET['zahl'])?0.0:$_GET['zahl']);
Also wenn $_GET['zahl'] leer ist, dann übergebe $_GET['zahl'] den Wert 0.0 und das Ganze wird mit GET übergeben.

Nun ich kenne, dass man mit GET die Variablen wie folgt weitergibt:
<a href='print.php?vorname=$vorname&name=$name>Drucken</a>
Das hier sehe ich zum Ersten mal:
?0.0:$_GET['zahl']
Könntet ihr mit bitte das erläutern? Ist das eine andere Schreibweise? Könnte man es auch so umschreiben:
?0.0=$_GET['zahl']

Danke
 
Bei diesem Operator handelt es sich um den so genannten ternären Operator, der einer if-Kontrollstruktur ähnelt.
Dieser kann beispielsweise wie folgt angewandt werden:
Code:
$var = (<Bedingung>) ? <Anweisung> : <Alternativ-Anweisung>;
Entspreche dabei:
Code:
if( <Bedingung> ) {
	$var = <Anweisung>;
} else {
	$var = <Alternativ-Anweisung>;
}
 
Zurück