Berechnungen zweistellig

Hallo,
aus einer MySQL Datenbank werden Zahlen ausgelesen, die in eine Berechnung
einfliessen.
Das Ergebnis sollen immer zweistellige Zahlen sein.
Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,
intern wird aber mit den weiteren Nachkommastellen gerechnet, sodass es
immer wieder in einzelfällen zu Rundungsfehlern kommt.
Wie weist man an, dass in PHP zweistellig gerechnet wird?
danke
guenter

fup: de.comp.lang.php.datenbanken
guenter nowack [ Mi, 20 Dezember 2006 08:40 ] [ ID #1573909 ]

Re: Berechnungen zweistellig

guenter nowack schrieb:

> Wie weist man an, dass in PHP zweistellig gerechnet wird?

Schnelle Lösung ohne viel Nachdenken: Nimm die Basiswerte, multipliziere
mit 100, runde auf die nächste Ganzzahl. Damit rechnest du dann und
dividierst das Regebnis am Schluss wieder durch 100.

gruss, heli
Helmut Chang [ Mi, 20 Dezember 2006 09:00 ] [ ID #1573910 ]

Re: Berechnungen zweistellig

Hallo Guenter,

> aus einer MySQL Datenbank werden Zahlen ausgelesen, die in eine Berechnung
> einfliessen.
> Das Ergebnis sollen immer zweistellige Zahlen sein.

Du meinst mit zwei Dezimalstellen, oder? Benutzt Du in der Datenbank
Gleitkommazahlen (float, double ...) oder Festkommazahlen (decimal)?

siehe: http://dev.mysql.com/doc/refman/5.0/en/precision-math-exampl es.html

> Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,
> intern wird aber mit den weiteren Nachkommastellen gerechnet, sodass es
> immer wieder in einzelfällen zu Rundungsfehlern kommt.

Wo und wie stellst Du das denn ein? Am Datentyp oder für die Ausgabe?

> Wie weist man an, dass in PHP zweistellig gerechnet wird?

Suchst Du die PHP-Funktionen round($x, 2), ceil($x, 2) oder floor($x, 2)
zum arithmetisch, auf- oder abrunden? Ansonsten kenne ich keinen Weg das
PHP allgemein anzuweisen.

Eventuell brauchst Du von allem etwas?

Heiko
--
http://portal.richler.de/ Namensportal zu Richler
http://www.richler.de/ Heiko Richler: Computer - Know How!
http://www.richler.info/ private Homepage
Heiko Richler [ Mi, 20 Dezember 2006 09:12 ] [ ID #1573911 ]

Re: Berechnungen zweistellig

guenter nowack schrieb:

> aus einer MySQL Datenbank werden Zahlen ausgelesen, die in eine Berechnung
> einfliessen.
> Das Ergebnis sollen immer zweistellige Zahlen sein.
> Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,
> intern wird aber mit den weiteren Nachkommastellen gerechnet, sodass es
> immer wieder in einzelfällen zu Rundungsfehlern kommt.
> Wie weist man an, dass in PHP zweistellig gerechnet wird?

Mit Hilfe des BCMath-Modules, welches Rechnen mit beliebiger Genauigkeit
unterstützt, sollte das möglich sein.

Siehe auch:
http://de2.php.net/manual/de/ref.bc.php

Gruß,
Torsten
thorny [ Mi, 20 Dezember 2006 09:40 ] [ ID #1573912 ]

Re: Berechnungen zweistellig

guenter nowack schrieb:

> Das Ergebnis sollen immer zweistellige Zahlen sein.
> Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,
> intern wird aber mit den weiteren Nachkommastellen gerechnet, sodass es

Ich gehe mal davon aus das du eine 4/5 Rundung brauchst z.B für Cent.
Innerhalb MySql geht das mit ROUND(wert,2) in PHP mit
round($wert,2)

siehe auch: http://de.php.net/manual/de/function.round.php

Jörg
sk [ Mi, 20 Dezember 2006 10:59 ] [ ID #1573913 ]

Re: Berechnungen zweistellig

guenter nowack schrieb:

> aus einer MySQL Datenbank werden Zahlen ausgelesen, die in eine Berechnung
> einfliessen.

Wo die Zahlen herkommen, dürfte für Dein Problem ziemlich egal sein.
Jedenfalls sehe ich außer der Herkunft Deiner Daten nichts in Deinem
Posting, was irgendetwas mit Datenbanken zu tun hat.

> Das Ergebnis sollen immer zweistellige Zahlen sein.

Also zwischen 0 und 99 liegen?

> Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,

Wo denn? Und wie?

> intern wird aber mit den weiteren Nachkommastellen gerechnet, sodass es
> immer wieder in einzelfällen zu Rundungsfehlern kommt.

Aha. Es geht also nicht um zweistellige Zahlen, sondern um Dezimalzahlen
mit einer Genauigkeit von zwei Nachkommastellen.

> Wie weist man an, dass in PHP zweistellig gerechnet wird?

Gar nicht. Solche Fälle vermeidet man, indem man nur mit ganzen Zahlen
rechnet, also z.B. nicht mit €uro, sondern mit Cent.

Gruß. Claus
--
,~°O O
O <http://www.wedding-card.de/> ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /
Claus Reibenstein [ Mi, 20 Dezember 2006 11:21 ] [ ID #1573914 ]

Re: Berechnungen zweistellig

guenter nowack schrieb:

> Das Ergebnis sollen immer zweistellige Zahlen sein.
> Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,
> intern wird aber mit den weiteren Nachkommastellen gerechnet, sodass es
> immer wieder in einzelfällen zu Rundungsfehlern kommt.

Das Problem sind nicht die Rundungsfehler in PHP, sondern die in der
Anzeige. Du musst versuchen, ungenauer zu rechnen, indem Du mit jeden
Zwischenergebnis, dass Du gerundet ausgibt auch gerundet weiterrechnest.

Falsch:

9,999 -> runden -> 9,99 -> Anzeigen
-> mal 10 -> 99,99 -> Anzeigen 99,99

Richtig:

9,99 -> runden -> 9,99 -> Anzeigen
-> mal 10 -> 99,90 -> Anzeigen 99,90

Grüße, Matthias

--
http://www.trullala.de
--
Der Trend geht ganz eindeutig zur Zweitsignatur.
do.not.REMOVETHAT [ Mi, 20 Dezember 2006 12:16 ] [ ID #1573915 ]

Re: Berechnungen zweistellig

guenter nowack schrieb:

> aus einer MySQL Datenbank werden Zahlen ausgelesen, die in eine Berechnung
> einfliessen.
> Das Ergebnis sollen immer zweistellige Zahlen sein.

Welches Ergebnis? Das des Auslesens oder das der Berechnung?

Wenns um die Berechnung geht:
3.23 * 8.88 ergibt erstmal obs Dir gefällt oder nicht 4 Nachkommastellen.

Um das gleich bei der Berechnung zu beeinflußen sei Dir BcMath ans Herz
gelegt.
http://www.php.net/manual/en/ref.bc.php

> Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,
> intern wird aber mit den weiteren Nachkommastellen gerechnet,

Was meinst Du mit intern? Was meinst Du mit einstellen? Haste in der
php.ini rumgeschraubt und dort die Genauigkeit (precision) verändert?

> fup: de.comp.lang.php.datenbanken

Was soll das den werden? Wenn sich Deine Frage auf Datenbanken bezieht,
dann frage in der NG, die dafür bestimmt ist.

MfG, Ulf
Ulf Kadner [ Mi, 20 Dezember 2006 10:03 ] [ ID #1573921 ]

Re: Berechnungen zweistellig

Hallo guenter,

* guenter nowack <gunow [at] gmx.net>:
> Das Ergebnis sollen immer zweistellige Zahlen sein. Das Problem ist
> aber, dass die Zweistelligkeit zwar eingestellt werden kann, intern
> wird aber mit den weiteren Nachkommastellen gerechnet, sodass es immer
> wieder in einzelfällen zu Rundungsfehlern kommt.

Festkommazahlen benutzen (also Ganzzahlen und das Komma einfach irgendwo
"definieren"). Wobei ich deiner Logik nicht folgen kann: Rundungsfehler
entstehen, wenn man Stellen abschneidet, nicht wenn man möglichst viele
berücksichtigt.

> fup: de.comp.lang.php.datenbanken

Was hat das denn mit Datenbanken zu tun?

Grüße, Felix

--
Felix M. Palmen (Zirias) \ -PGP- <fmp [at] palmen.homeip.net> /"\ ASCII Ribbon
web: http://zirias.ath.cx/ \ http://zirias.ath.cx/pub.txt \ / Campaign
my open source projects: \ FP ED9B 62D0 BE39 32F9 2488 X Against HTML In
http://zirias.ath.cx/?pg=pro \ 5D0C 8177 9D80 5ECF F683 / \ Mail And News
zirias [ Mi, 20 Dezember 2006 10:10 ] [ ID #1573922 ]

Re: Berechnungen zweistellig

Hallo

Felix M. Palmen schrieb:

> Festkommazahlen benutzen (also Ganzzahlen und das Komma einfach irgendwo
> "definieren"). Wobei ich deiner Logik nicht folgen kann: Rundungsfehler
> entstehen, wenn man Stellen abschneidet, nicht wenn man möglichst viele
> berücksichtigt.

kommt drauf an:

Zahl gerundet
1,55 1,6
1,45 1,5
----- -----
3,00 3,0

sieht halt falsch aus.

Gruß
Irmgard
Irmgard Schwenteck [ Mi, 20 Dezember 2006 12:02 ] [ ID #1573924 ]
PHP » de.comp.lang.php.datenbanken » Berechnungen zweistellig

Vorheriges Thema: Umlaute, MySQL 4.x in Suche (LIKE)
Nächstes Thema: Insert Fehlersuche: