PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Flächenberchnung



studio54
08-03-2006, 04:03
Hallo,

Bin dabei für einen Kunden (kleine Druckerei) eine Seite zu machen, auf der u.a. ein Kalkulator zu finden sein soll und hier ist das Problem.

Der Preis (Quadratmeterpreis) verringert sich bei zunehmender Druckgröße (was ja auch logisch ist, also eine Art Rabatt).

Habe das bis jetzt folgendermaßen gelöst, wo es allerdings Probleme gibt. Ein Druck mit der Fläche 0,7m² ist teurer als ein Druck mit 0,77m², da es eben bei jeder Stufung Überschneidungen gibt, der Code schaut jetzt ungefähr folgendermaßen aus:


if ($flaeche <= 0.16) {
$preis = ($flaeche * 140);
}
elseif ($flaeche <= 0.3) {
$preis = ($flaeche * 110);
}
elseif ($flaeche <= 0.5) {
$preis = ($flaeche * 92);
}
elseif ($flaeche <= 0.75) {
$preis = ($flaeche * 88);
}
elseif ($flaeche <= 1) {
$preis = ($flaeche * 58);
}
elseif ($flaeche <= 1.5) {
$preis = ($flaeche * 40);
}
elseif ($flaeche > 1.5) {
$preis = ($flaeche *30);


Habe jetzt schon einiges herumprobiert und überlegt, komme aber nicht weiter und bin schon halb am Verzweifeln…:( Für eine Anregung bzw. Hinweis wie man das Lösen könnte währe ich euch sehr dankbar.

Mit freundlichen Grüßen
Andre

smofi
08-03-2006, 07:10
Lieber Andre,

solange Du den Rabatt in die Faktoren einbaust, musst Du genau "zielen", damit keine Sprünge im Endpreis entstehen. Sonst geschieht es, dass die kleinstmögliche Fläche einer Preisklasse teurer wird als die grösstmögliche der nächsten:


0.75 m2 * 88 W/m2 = 66 W aber
0.751 m2 * 58 W/m2 = 43.58 W
(mit W als Währung)

Ich würde einen Basispreis berechnen und dann den Rabatt je nach Fläche dort abziehen:



// 1. Basispreis berechnen
$preis = $flaeche * 140;

// 2. Rabatt wegschnipseln
if ($flaeche <= 0.16) {
$preis *= 1;
}
elseif ($flaeche <= 0.3) {
$preis *= 0.9;
}
elseif ($flaeche <= 0.5) {
$preis *= 0.8;
}
elseif ($flaeche <= 0.75) {
$preis *= 0.7;
}
elseif ($flaeche <= 1) {
$preis *= 0.6;
}
elseif ($flaeche <= 1.5) {
$preis *= 0.5; // noch halb so teuer
}
elseif ($flaeche > 1.5) {
$preis *= 0.4;
}

Nun kannst Du mit den Faktoren regulieren, wie gross der Rabatt pro Fläche wird. Im Beispiel ist zwischen 1 und 1.5 der Preis noch halb so teuer.

Und weil PHP so viel Arbeit leistet und so coole Datenstrukturen hat, kann man das ganze noch wartbarer schreiben:



$tabelle["0.16"] = 1;
$tabelle["0.3"] = 0.9;
$tabelle["0.5"] = 0.8;
$tabelle["0.75"] = 0.7;
$tabelle["1"] = 0.6;
$tabelle["1.5"] = 0.5;
$tabelle["100000"] = 0.4;

// 1. Basispreis berechnen
$preis = $flaeche * 140;

// 2. Rabatt wegschnipseln
foreach($tabelle as $grenze => $faktor)
{
if ($flaeche <= $grenze)
{
$preis *= $faktor;
break;
}
}

Die Arbeit, die implizit geleistet wird, ist:

Anlegen und Verwalten einer Hashtable
Umwandlung von Strings in Zahlen

Wenn Du die $tabelle "von innen" untersuchen möchtest, kannst Du var_dump($tabelle) verwenden.

fg Smofi :cool: