Berechnungen zweistellig

Berechnungen zweistellig

am 20.12.2006 08:40:08 von guenter nowack

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

Re: Berechnungen zweistellig

am 20.12.2006 09:00:52 von Helmut Chang

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

Re: Berechnungen zweistellig

am 20.12.2006 09:12:52 von Heiko Richler

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

Re: Berechnungen zweistellig

am 20.12.2006 09:40:43 von thorny

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

Re: Berechnungen zweistellig

am 20.12.2006 10:03:29 von Ulf Kadner

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

Re: Berechnungen zweistellig

am 20.12.2006 10:10:53 von zirias

Hallo guenter,

* guenter nowack :
> 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- /"\ 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

Re: Berechnungen zweistellig

am 20.12.2006 10:59:55 von sk

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

Re: Berechnungen zweistellig

am 20.12.2006 11:21:59 von Claus Reibenstein

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 ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /

Re: Berechnungen zweistellig

am 20.12.2006 12:02:56 von Irmgard Schwenteck

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

Re: Berechnungen zweistellig

am 20.12.2006 12:16:36 von do.not.REMOVETHAT

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.