Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 20 Math
  gp 20.1 Math_Integer
  gp 20.2 Math_TrigOp
  gp 20.3 Math_Stats
  gp 20.4 Math_Fraction
  gp 20.5 Math_BinaryUtils


Rheinwerk Computing

20.4 Math_Fraction  toptop


Besprochene Version: 0.3.0 Lizenz: PHP
Klassendatei(en): Math/Fraction.php; Math/FractionOp.php

Vielleicht kennen Sie das Problem noch aus der Schule. Zwar ist es viel einfacher, mit Fließkommazahlen als mit Brüchen zu rechnen, aber in einigen Zusammenhängen sind Brüche einfach genauer und schöner darzustellen. Allerdings gibt es in PHP keinen Datentyp für die Darstellung von Brüchen. Diese Lücke schließt Math_Fraction.

Auch bei diesem Paket gilt, dass die Definition der Datenstruktur in einer anderen Datei vorgenommen wurde als die Deklaration der Rechenoperationen. Vor diesem Hintergrund empfiehlt es sich, die Datei Math/FractionOp.php einzubinden, die dann automatisch Math/Fraction.php inkludiert.

Die Zahl, die als Bruch dargestellt werden soll, übergeben Sie gleich dem Konstruktor. Interessant hierbei ist, dass Sie ihm entweder zwei Integer-Werte oder eine Fließkommazahl übergeben können. Im ersten Fall versucht das Paket, die Fließkommazahl näherungsweise durch einen Bruch darzustellen.

require_once("Math/FractionOp.php"); 
$float=3.14159265358979323846; 
$bruch=new Math_Fraction($float); 
if (true===PEAR::isError($bruch)) 
{ 
   die (bruch->getMessage()); 
} 
$zaehler=$bruch->getNum(); 
$nenner=$bruch->getDen(); 
$erg=$zaehler/$nenner; 
echo "Gegeben wurde: $float<br />"; 
echo "<u>$zaehler</u> = $erg<br />"; 
echo $nenner;

Listing 20.4 Nutzung von Math_Fraction

Wie Sie in Listing 20.4 sehen, können Sie direkt die Fließkommazahl übergeben. Das Paket erstellt dann einen Bruch auf Basis dieser Zahl. Um einen Bruch direkt zu definieren, müssten Sie den Zähler und Nenner als Integer-Werte an den Konstruktor übergeben: new Math_Fraction(2,5). Nachdem die Konvertierung stattgefunden hat, können Sie mit den Methoden getNum() und getDen() Zähler und Nenner auslesen.

Abbildung 20.1 Ausgabe des Scripts im Browser

Wie Sie in Abbildung 20.1 sehen können, ist der berechnete Bruch zum einen noch nicht gekürzt, und zum anderen fallen einige Nachkommastellen weg, was leider nicht immer zu vermeiden ist, da Integer-Zahlen nicht unendlich groß werden können.

Um einen solchen Bruch zu kürzen, ist die statische Methode simplify() vorgesehen. Sie bekommt ein Math_Fraction-Objekt übergeben und liefert die gekürzte Variante dieses Bruchs als neues Objekt zurück.

Für das obige Beispiel würde das Kürzen des Bruchs so aussehen:

$echter_bruch=Math_FractionOp::simplify($bruch); 
echo $echter_bruch->toString();

Die Methode simplify() gehört zur Klasse Math_FractionOp, so dass sie auch über diese angesprochen werden muss. Um den Bruch auf einfachem Wege auszugeben, steht auch die Methode toString() zur Verfügung. Diese gibt Zähler und Nenner, getrennt durch einen Slash, zurück. In diesem Zusammenhang ist auch toFloat() hilfreich, die einen Bruch ausdividiert und das Ergebnis als Fließkommazahl zurückgibt.

Neben simplify() sind natürlich noch andere Methoden definiert, um sinnvoll mit Brüchen arbeiten zu können. Zum Addieren ist add() verfügbar, und eine Division können Sie mit sub() ausführen. Zum Multiplizieren und Dividieren sind mult() und div() vorgesehen. Alle Methoden bekommen mindestens zwei Parameter, nämlich die beiden Brüche, übergeben. Darüber hinaus können Sie mit einem dritten Parameter definieren, ob das Ergebnis automatisch gekürzt (true) werden soll oder nicht (false). Die Standardeinstellung ist, dass die Brüche automatisch gekürzt werden.

Möchten Sie zwei Brüche miteinander vergleichen, steht compare() zur Verfügung. compare() bekommt zwei Brüche übergeben und gibt die Zahl Null zurück, wenn beide Werte identisch sind. Ist der Wert des linken Bruchs kleiner, ist -1 der Rückgabewert und sonst 1. Hierbei ist zu beachten, dass der Vergleich auf Basis der ausdividierten Werte stattfindet und sich im Einzelfall ein Fehler einschleichen könnte, wenn der Unterschied außerhalb der Fließkomma-Genauigkeit von PHP liegt.

Eine einfache, aber vielleicht hilfreiche Methode ist noch reciprocal(), die den Kehrwert eines übergebenen Bruchs zurückgibt.

Alle vorgenannten Methoden liefern im Falle eines Fehlers ein PEAR_Error-Objekt zurück.

 <<   zurück
     
  Zum Katalog
Zum Katalog: PHP PEAR
PHP PEAR
Jetzt bestellen!
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Katalog: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Katalog: MySQL 5.6






 MySQL 5.6


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de