PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Adam Riese und PHP - falsche Ergebnisse in Rechnungen (http://www.selfphp.de/forum/showthread.php?t=11549)

Florian42 13.10.2005 17:06:57

Adam Riese und PHP - falsche Ergebnisse in Rechnungen
 
Ich habe folgendes PHP Script entwickelt um nach einem bestimmten Rechenverfahren eine Punktzahl für eine Liga auszurechnen. Es gibt insgesamt 4, genau genommen 5 Faktoren, aus denen sich die Punkte ergeben. Leider erhalte ich in den Multiplikationen falsche Ergebnisse auch wenn ich Dezimalzahlen runde.
Vl. ersteinmal mein Script: http://www.solarthemen.de/sobuli/larsform.php

Und hier der wesentliche Teil des Scriptes:
PHP-Code:

$A=$HTTP_POST_VARS["A"]; //Fläche Solarthermie: x qm
$B=$HTTP_POST_VARS["B"]; //Fläche unverglaste Absorber: x qm
$C=$HTTP_POST_VARS["C"]; //Photovoltaik-Leistung in Watt: x kWatt
$Cg=$HTTP_POST_VARS["Cg"]; //Photovoltaik-Leistung in Watt: x kWatt
$D=$HTTP_POST_VARS["D"]; //Einwohner: x

round($A,3);
round($B,3);
round($C,4);
round($Cg,4);

echo 
"A: $A <br>";
echo 
"B: $B <br>";
echo 
"D: $D <br>";

$C=$C*1000;
$Cg=round($Cg*1000,15);
echo 
"C: $C <br>";
echo 
"Cg: $Cg <br>";
//if($D=="" or $C=="" or $Cg=="" or $B=="" or $A=="" or $D=="0" and $C=="0" and $B=="0" and $A=="0"){
//echo "Bitte geben Sie Ihre Daten ein!";}
//else{
if($Cg>$C){
echo 
"Bitte geben Sie eine Photovoltaik-Leistung ein die größer oder gleich der der Leistung der Großanlage(n) ist";}
else{
if(
$D=="0" or $D==""){
echo 
"Bitte geben Sie eine Einwohnerzahl ein!";}
else{
if(
strstr($A,".") or strstr($B,".") or strstr($D,".")){
echo 
"Bitte geben Sie die Zahlen ohne \"Tausenderpunkte\" ein! Für Nachkommastellen nutzen Sie bitte Kommas.";}
else{
//1 Rechnung
$Z=round((0.7*$B),10);
$S=round(($A+$Z),10);
$K=round($S/$D,5);
echo 
"Z: $Z <br>";
echo 
"S: $S <br>";
echo 
"K: $K <br>";
$X=$K/0.01//einen Punkt gibt es für  0.01qm/Einw.
echo"X: $X <br>";

//2 Rechnung
//PV Großanlagen
$Lg=round($Cg/$D,5);
$Yg=round($Lg/3,5);
$PktG=round(pow((sqrt($Yg)),2)*0.5,5);
echo
"Yg: $Yg <br>";

if(
$PktG>40.1)
{
$L=round(($C-$Cg)/$D,2);
$Y=round($L/3,2);
echo 
"Y: $Y <br>";
echo 
"L: $L <br>";

//3 Rechnung
$Punktzahl=round(pow((sqrt($X)+sqrt($Y)),2)*0.5,5);
$Punktzahl=$Punktzahl+40.1;}

else
{
$L=round($C/$D,2);
echo
"L: $L <br>";
$Y=round($L/3,2);
echo
"Y: $Y <br>";
//3 Rechnung
$Punktzahl=round(pow((sqrt($X)+sqrt($Y)),2)*0.5,5);}

echo 
"Ihre Kommune kommt auf <font size=\"5\" face=\"Arial\"><br><b>";
echo 
round($Punktzahl); 

Die ganzen rounds sind eingebaut um eventuell unendliche Brüche auszuschließen.

Ich kommentiere jetzt mal nicht jeden Schritt. Eventuell wird das Prob. ja so schon deutlich. Wenn ihr oben in der Maske 0,9 | 0,9 | 2 | 0,9 | 100 | als Werte eingebt, erhaltet ihr 3 Pkt. als Ergebnis, erhöht ihr die 0,9 Werte um 0,1 auf 1 erhaltet ihr 8 Pkt. -> FEHLER

ein falsches Ergebnis ergibt sich auf jeden Fall bei
PHP-Code:

$Cg=round($Cg*1000,15); 

und
PHP-Code:

$Z=round((0.7*$B),10);
$S=round(($A+$Z),10);
$K=round($S/$D,5);
echo 
"Z: $Z <br>";
echo 
"S: $S <br>";
echo 
"K: $K <br>";
$X=$K/0.01//einen Punkt gibt es für  0.01qm/Einw.
echo"X: $X <br>"



Vielleicht kennt ihr ja das Problem und könnt mir, am besten unkompliziert und einfach, helfen. Schonmal vielen Dank! Falls noch Fragen sind, ich gucke auf jeden Fall regelmässig rein.


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:02:21 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.