21 Numbers
In der Kategorie »Numbers« sind einige Pakete zu finden, die reine Zahlen in eine andere Darstellung konvertieren können. Neben der Möglichkeit, Zahlen in eine römische Darstellung zu konvertieren, können Sie Zahlen auch als ausgeschriebene Texte ausgeben lassen.
21.1 Numbers_Roman 

Besprochene Version: 1.0.1 | Lizenz: PHP-Lizenz |
Klassendatei(en): Numbers/Roman.php |
Numbers_Roman ist ein kleines, aber leistungsfähiges Paket, das es Ihnen ermöglicht, Integer-Zahlen in eine römische Darstellung zu bringen bzw. eine römische Zahl in eine arabische Darstellung umzurechnen. Es besteht nur aus zwei Methoden, die beide statisch aufgerufen werden können. Interessant ist hierbei, dass die Methoden keine Fehler generieren (können). Sie müssen die Rückgabewerte also nicht daraufhin prüfen, ob ein PEAR_Error-Objekt generiert wurde.
Die Methode toNumeral() konvertiert eine Zahl von der arabischen in die römische Darstellung. Sie bekommt als ersten Parameter die zu konvertierende Zahl übergeben und liefert das römische Pendant zurück:
Listing 21.1 Konvertieren einer arabischen Zahl in eine römische Darstellung
Die Methode akzeptiert aber noch zwei weitere Parameter, mit denen Sie ihr Verhalten beeinflussen können. Geben Sie nach der Zahl ein false an, wird die Zahl mit Kleinbuchstaben dargestellt. Die Default-Einstellung true definiert, dass die Zahl in Großbuchstaben dargestellt wird. Auch bei dem nächsten Parameter handelt es sich um einen booleschen Wert. Dieser steuert, ob die Zahl als HTML ausgegeben werden soll oder nicht. Das mag sich an dieser Stelle ein wenig komisch anhören, hat aber einen ganz einfachen Hintergrund. Und zwar sieht das römische Zahlensystem vor, dass eine Zahl als »mit 1000 multipliziert« angesehen wird, wenn ein Strich darüber ist oder sie links und rechts mit Strichen »eingekastet« ist. Wenn Sie die HTML-Darstellung dadurch bestätigen, dass Sie an dritter Stelle ein true angeben (die Standard-Einstellung), wird mithilfe von <span style="text-decoration:overline;"> ein Strich über dem betreffenden Zeichen dargestellt. Die Alternative, wenn Sie false angeben, ist, dass links neben der Ziffer, die ein Vielfaches von 1000 sein soll, jeweils ein Unterstrich dargestellt wird. So wird die Zahl 9002 in der »Nicht-HTML-Darstellung« durch _VM_VII ( = 5*1000 + (5*1000 – 1000) + 1 + 1) repräsentiert. Bevorzugen Sie die üblichere Darstellung mit senkrechten Strichen links und rechts neben der Zahl, hilft die folgende kleine Routine Ihnen weiter:
include_once("Numbers/Roman.php"); //Konvertieren in Grossbuchstaben ohne HTML $zahlAlt= Numbers_Roman::toNumeral(9002,true,false); $len=strlen($zahlAlt); //Stringlaenge ermitteln $zahlNeu=''; //zum Speichern der neuen Zahl // Alte Zahl in Schleife durchlaufen for ($cnt=0; $cnt<$len; $cnt+=1) { $ziffer=$zahlAlt{$cnt}; if ("_"==$ziffer) // Unterstrich gefunden? { $cnt+=1; $zahlNeu.="|{$zahlAlt{$cnt}}|"; } else { $zahlNeu.=$ziffer; } } echo $zahlNeu;
Listing 21.2 Ausgabe einer Zahl im Text-Modus mit Konvertierung
Die zweite Methode, die das Paket unterstützt, ist toNumber(). Sie übernimmt die Konvertierung in eine arabische Zahl und bekommt eine römische in großer, kleiner oder gemischter Schreibweise übergeben.