# Berechnung mit PHP ergibt falsches Ergebnis



## evoleena (7. April 2005)

Hallo Leute

Habe mal wieder ein Problem was ich überhaupt nicht verstehe!
Es geht um Berechnungen in PHP. Ich will meinen Ausgerechneten Wert mit 1,16 multiplizieren.
Der ausgerechnete Wert kommt durch kosten die in DB stehen mal personenanzahl mal Anzahl der Tag + andere kosten
In der DB hatte ich vorher float und nun habe ich es mit varchar probiert. Habe auch schon  punkt und Koma ausprobiert aber es kommt immer das falsche Ergebnis raus.

z.B. ausgerechneter Wert = 524,30 
dann mal 1,16 ergibt normalerweise 608,18
aber PHP rechnet mit da 631,05 aus.

und egal wie ich formatierung oder berechnung drehe ich komme net auf das richtige ergebnis!
Woran liegt das?
Hat jemand schon mal das gleiche Problem und kann mir sagen woran das liegt.
Ich weiß überhaupt nicht mehr weiter.


----------



## redlama (7. April 2005)

Probier's mal so:
	
	
	



```
<?php
$zahl1 = 524.30;
$zahl2 = 1.16;
$ergebnis = $zahl1 * $zahl2;
echo $ergebnis;
?>
```
Das liefert das korrekte Ergebnis!

redlama


----------



## evoleena (7. April 2005)

Das ist richtig! das habe ich auch schon mitbekommen!
da aber nun die 524,30 errechne und dann erst mit 1,16 multipliziere komme ich net mehr auf das Ergebnis.
Das ganz wird in ein Excel Datei geschrieben.
Vielleicht kann du mir ja genau sagen wie ich die kosten in der DB formatieren muss.
und die 1.16 habe ich so geschrieben

```
$mwst=1.16;
```


----------



## redlama (7. April 2005)

Beschreib das Problem mal ein wenig ausführlicher (evtl. mit Quelltext).
Was wird wo berechnet und was kommt mit welchem Datentyp aus was für einer DB, ...

redlama


----------



## Lukasz (7. April 2005)

Ich glaube er meint dass er ein (,) statt Punkt hat.


$betrag = "524,30";

anstatt  
$betrag = 524.30;


```
$betrag = eregi_replace(",",".",$betrag);
```
dürfte das Problem lösen!


----------



## evoleena (7. April 2005)

Ich bin eine sie! Aber egal

Also in Datenbank habe ich jetzt Varchar und die Beträge mit punkt
Im Excel wird das ganze wieder mit koma ausgegeben, da als zahl mit 2 dezimal stellen formatiert.
Bevor ich das Gesamtergebnis im Excel ausgebe wird noch mit 1.16 (mit punkt) multipliziert
und da kommt dann die 631,.... raus was aber falsch ist!

@lukasz habe den Befehl einfach eingefügt, aber das geht auch nicht! Oder muss ich dann je nachdem welches in frage kommt das andere Wegmachen?

Schwierig den quelltext zu zeigen der ist ein wenig lang!
als Beispiel :
in datenbank steht eine Übernachtung kostet 10.35 es sind drei Personen ->das sind 31,05 so und sie sind fünf tage da -> 155,25 so und dann ist eine Funktion eingebaut in der entschieden wird welche Mwst drauf muss dann wird dass ganz mit  z.B. 1.16 multipliziert
dann das ergebnis im Excel ausgegeben welches natürlich falsch ist!


----------



## redlama (7. April 2005)

Also erstmal würde ich die Zahlen in der DB nicht varchar() sondern decimal(6,2) machen. Das bedeutet, dass Du decimale Zahlen mit 6 Stellen vor und 2 Stellen nach dem Komma speichern kannst (sollte reichen).
Und warum berechnest Du das ganze mit Excel und nicht mit PHP?
Da kannst Du doch die Daten aus der DB holen, berechnen und ausgeben!?

redlama


----------



## evoleena (7. April 2005)

kann ich mal versuchen!
die werte werden mit PHP berechnet! und dann in excel ausgegeben, soll doch eine Rechnung werden!
ich hatte es mit angegeben, da ich nicht genau wußte ob es vielleicht auch am excel liegen könnte! 
ich probiers dann nochmal mit decimal!


----------



## evoleena (7. April 2005)

Wenn ich decimal einstelle, dann macht er die Nachkomastellen einfach weg egal was ich ales länge einstelle. Er stellt sich dann immer wieder auf 10,0

Wie ist das mit:
bcmul ( string linker Operand, string rechter Operand [, int Genauigkeit])
Was ist dann meine Ergebnisvariable?


----------



## redlama (8. April 2005)

Hm, ...
Das mit dem decimal klingt seltsam!
Aber sag mal, die Rechnung, die Du mit Excel erstellst, kannst Du doch mit mehreren Variablen füttern.
Warum machst Du nicht erst sämtliche Berechnungen mit PHP und übergibst dann die Werte so, dass es sie an der richtigen Position in der Excel Tabelle liegen und dort wie ein Rechnung aussehen.
Du musst ja nicht unbedingt mit Excel rechnen, ...
Oder sehe ich das falsch?

redlama


----------



## evoleena (8. April 2005)

Also habe jetzt als Decimal gemacht. Lag an der Version die ich zu hause hatte, das war noch die Front 2.5
Mit Excel rechne ich nicht!
ich rechne mit PHP. Dann werden die einzelnen kosten berechnet und zum Schluß soll es komplett zusammengerechnet werden und mit 1.07 oder 1.16 multiplieziert werden. Und da habe ich das Problem das er nicht auf das richtige Ergebnis kommt.
habe es jetzt schon mit runden auf 2 komastellen versucht, aber da passiert gar nix!
Ich weiß nicht warum er so verkehrt 524.30 *1.16 rechnet.


----------



## redlama (8. April 2005)

Zeig doch mal den Code, der da falsch rechnet!
Vielleicht sehen wir ja was, ...

redlama


----------



## evoleena (8. April 2005)

na ich versuchs mal

also hier die function mit der Mwst

```
<?
function mehrwertsteuer($db,$bid)
{
    $query = mysql_db_query($db,"SELECT mitarbeiter FROM buchung WHERE B_ID = '".$bid."'");
	$mitarbeiter = mysql_fetch_array($query);
	{
	    $mit = $mitarbeiter['mitarbeiter'];
	    if ($mit == 1)
	    {
		$mwst = 1.07;
	    }
	    else
	    {
	        $mwst = 1.16;
	    }
	    return $mwst;
    }
}
?>
```

und hier der Teil wo die MwSt zu den Kosten multipliziert wird

```
$mwst = mehrwertsteuer($db,$bid);
    $kosten = $kosten*$mwst;
```

$kosten sind z.B. die 524.30


----------



## redlama (8. April 2005)

Hm, ...
Ich bin mir grad nicht sicher, wofür die {} unter $mitarbeiter = mysql_fetch_array($query); sin sollen, aber egal.
Ich habe das ganze mal so probiert:
	
	
	



```
<?php
$kosten = 524.30;

function mehrwertsteuer($db, $bid)
{
  $mit = 2;
  if($mit == 1)
    $mwst = 1.07;
  else
    $mwst = 1.16;
  return $mwst;
}

$mwst = mehrwertsteuer($db, $bid);
$kosten = $kosten * $mwst;
echo $kosten;
?>
```
Und siehe da, ich bekomme 608.188 als Ergebnis. Dann wird es wohl irgendwie an den Werten aus der DB liegen (vermute ich).

redlama


----------



## evoleena (8. April 2005)

Ja die klammer kommt net dahin!
trotzdem kann ich es nicht verstehen er gibt mir ja als gesamtergebnis 524,30 in excel aus 
oder er rechnet mit ewigen komastellen das daher das falsche ergebnis kommt.
habe jetzt noch was berechnet, da wird aber nur der Wert aus der DB genommen mit den Anzahl der Personen aus der DB und dann mit 1.16 und da kommt das richtige ergebnis raus! also muss ich wohl meinen ganzen Quelltext nochmal durchwühlen der mittlerweile 587 Zeilen hat *heul*.


//EDIT: Habe jetzt was ganz tolles gemacht.
           Habe nicht die Mwst aus Mwst mit in mein Hptscript genommen, sondern habe die          
           Kosten in MWST mitgenommen und dann kommt 608,19 raus.
           Nun erklärt mir mal einer WARUM das andersrum nicht geht!


----------

