Seite 1 von 1

PHP-Funktion „bcmod”

Verfasst: 28.03.2004 23:37
von wksys
Frage: wie geht man mit der PHP-Funktion „bcmod” um ?

Ich weiß, daß daß die Funktion „bcmod” nur dann funktioniert, wenn auch die entsprechenden Elemente auf dem Server installiert sind.
Ruft man auf meinem Server „phpinfo()” auf, so wird angezeigt, daß die mathematischen Funktionen installiert sind: es heißt dort u.a.:

„PHP Version 4.1.1” (führe ich an, weil die Version evtl. von Bedeutung ist)
und in der Sektion „bcmath” steht:
„BCMath support = enabled”

Es sollte also eigentlich funktionieren ...

Ich möchte etwas in PHP programmiern, was in Abhängigkeit von der „Rest-Funktion” funktioniert.
(Es geht darum, eine Datumsfunktion zu programmieren, welche von einem Schaltjahr abhängig ist).

Daher dachte ich, daß man folgendes einrichten kann:

Zuerst hole ich mir das Serverdatum, und löse es auf:

$datum = getdate(time());
$year = $datum[year];

Dann möchte ich den Restwert haben, um festzustellen, ob es ein Schaltjahr ist:

$a = bcmod($year,4);

und das Ergebnis sollte eine Zahl zwischen 0 und 3 sein, je nach Jahreszahl.

Rufe ich dann die Variable $a auf, so erscheint immer eine „Null”.

echo $a;
(Resultat: 0)

Natürlich ist dann auch die Weiterverarbeitung von $a unsinnig, denn

$Februar = "28";
if ( $a = '0' ) $Februar = "29";

ergibt bei $Februar immer 29 als Resultat, da $a ja (immer ?) gleich Null ist.

Witzigerweise ergibt der Befehl

echo bcmod($year);

das richtige Ergebnis zwischen 0 und 3, je nach Jahreszahl.
Nur: man kann mit dem Resultat von „echo” nicht weiterarbeiten, es wird ja nicht einer Variablen zugeordnet.

Da ich die Funktion unbedingt brauche, habe ich ein „workaround” programmiert:

$Februar = 29
$datum = getdate(time());
$year = $datum[year];
$x = $year/4;
$y = floor($x);
$z = $x - $y;
if ( $z > '0' ) $Februar = 28;

Das funktioniert zwar, ist aber doch ein wenig umständlich, und ich frage mich, wozu es die Funktion „bcmod” eigentlich gibt.

Weiß jemand, wie man's richtig macht ?
Sehe ich 'mal wieder den Wald vor lauter Bäumen nicht ?

Re: PHP-Funktion „bcmod”

Verfasst: 29.03.2004 00:00
von Pyramide
wksys hat geschrieben:if ( $a = '0' )
Da liegt der Fehler: mit = weist man Werte zu, mit == vergleicht man.

PS: Modulo kann man auch ohne die bc*-Funktionen nutzen: http://de.php.net/manual/de/language.op ... hmetic.php

Verfasst: 29.03.2004 00:44
von wksys
Zuerst einmal herzlichen Dank für Deine Antwort.

Aber:
Es kann nicht am Vergleichsoperator liegen.
In meinem Testprogramm mit der Funktion „bcmod” habe ich den Vergleichsoperator korrekt mit zwei Gleichheitszeichen angegeben, also mit „==”. (in meiner Forenanfrage hab' ich es freihändig geschrieben, und daher das doppelte Gleichheitszeichen schlichtweg vergessen).

Es funktioniert trotzdem nicht.

Außerdem:

wenn ich mir das Datum vom Server hole, die Jahreszahl extrahiere, diese einer Variablen zuweise und damit weiterrechnen will, so findet gar keine Vergleichsoperation statt.

Also:

$datum = getdate(time());
$year = $datum[year];
$a = bcmod($year);
echo $a;

so hat keine Vergleichsoperation stattgefunden.
Trotzdem ergibt „echo $a” immer das Ergebnis „0”, egal, wie groß der Restwert ist.
Es kann also nicht am „doppeltem” Gleichheitszeichen liegen.

Was also könnte mein Fehler sein ?

Verfasst: 29.03.2004 07:32
von Dennis63
Morgen.

Mal ne Frage wegen dem Schaltjahr. Warum nimmst Du nicht die PHP-Funktion dafür?

Code: Alles auswählen

date(,$myDate,"I")
Gibt 1 zurück, wenn in $myDate ein Schaltjahr ist.

Grüße
Dennis

Verfasst: 30.03.2004 21:34
von wksys
Dennis Böge hat geschrieben:Warum nimmst Du nicht die PHP-Funktion dafür?
Weil ich es bei den vielen date-Funktionen übersehen habe.
Gruß

Verfasst: 02.04.2004 20:37
von Pyramide
wksys hat geschrieben:$a = bcmod($year);
Da fehlt der zweite Parameter :roll:

Verfasst: 02.04.2004 21:54
von wksys
Nein, da fehlt kein Parameter. In meiner ersten message (siehe ganz oben) steht:

Code: Alles auswählen

$a = bcmod($year,4);
echo $a;
und das führt nicht zu einem gewünschtem Resultat.

Gebe ich allerdings

Code: Alles auswählen

echo bcmod($year,4);
so erhält man das Resultat.

Die Frage ist also, wieso „echo” ein richtiges Resultat aufweist, die Zuweisung zu einer Variablen dagegen nicht.
Ich weiß also immer noch nicht, wo mein Fehler liegt.