Problem mit Gleitkomma-Vergleich

patator

Mitglied
Hallo Leute, wieder mal ein Problem was ich nicht verstehe:

Habe folgenden Code:

PHP:
<?php
// Gebühren
$gebuehr_bis_1_00_1_99 = 0.50; // Gebühr für Artikel bis 1,99 EUR
$gebuehr_bis_2_00_9_99 = 0.60; // Gebühr für Artikel bis 9,99 EUR
$gebuehr_bis_10_00_24_99 = 0.70; // Gebühr für Artikel bis 24,99 EUR
$gebuehr_bis_25_00_99_99 = 0.80; // Gebühr für Artikel bis 99,99 EUR
$gebuehr_bis_100_00_249_99 = 0.90; // Gebühr für Artikel bis 249,99 EUR
$gebuehr_bis_250_00        = 1.50; // Gebühr für Artikel ab 250 EUR	
	
if($test < '2'){$gebuehr_artikel = $gebuehr_bis_1_00_1_99;}
if($test < '10'){$gebuehr_artikel = $gebuehr_bis_2_00_9_99;}
if($test < '25'){$gebuehr_artikel = $gebuehr_bis_10_00_24_99;}
if($test < '100'){$gebuehr_artikel = $gebuehr_bis_25_00_99_99;}
if($test < '250'){$gebuehr_artikel = $gebuehr_bis_100_00_249_99;}
if($test >= '250'){$gebuehr_artikel = $gebuehr_bis_250_00;}

$test = 1.2;
echo $gebuehr_artikel;
?>

Komischerweise gibt er mir als Rückgabewert 0.9 zurück und nicht 0.5.
Habt Ihr ne Idee was das sein kann?
 
Hallo,

du hast da nen Logicfehler drinnen in deinem Script. Und zwar geht er jetzt jede if-Anweisung durch solange $test < 250 ist.

du muesstests es mit elseif loesen ala (und der schoenheit des Scripts wegen, gleich mit ner Funktion):

PHP:
<?php
// Gebühren
$gebuehr_bis_1_00_1_99 = 0.50; // Gebühr für Artikel bis 1,99 EUR
$gebuehr_bis_2_00_9_99 = 0.60; // Gebühr für Artikel bis 9,99 EUR
$gebuehr_bis_10_00_24_99 = 0.70; // Gebühr für Artikel bis 24,99 EUR
$gebuehr_bis_25_00_99_99 = 0.80; // Gebühr für Artikel bis 99,99 EUR
$gebuehr_bis_100_00_249_99 = 0.90; // Gebühr für Artikel bis 249,99 EUR
$gebuehr_bis_250_00        = 1.50; // Gebühr für Artikel ab 250 EUR    

function gebuehren($test){
  if($test < '2')
    {$gebuehr_artikel = $gebuehr_bis_1_00_1_99;}
  elseif($test < '10')
    {$gebuehr_artikel = $gebuehr_bis_2_00_9_99;}
  elseif($test < '25')
    {$gebuehr_artikel = $gebuehr_bis_10_00_24_99;}
  elseif($test < '100')
    {$gebuehr_artikel = $gebuehr_bis_25_00_99_99;}
  elseif($test < '250')
    {$gebuehr_artikel = $gebuehr_bis_100_00_249_99;}
  elseif($test >= '250')
    {$gebuehr_artikel = $gebuehr_bis_250_00;}

  return $gebuehr_artikel;
}
$preis = 1.2;
echo gebuehren($preis);
?>


Hoffe das hilft dir, mfg Fabian
 
Zuletzt bearbeitet:
Beides sieht nicht besonders gut aus. Mein Vorschlag:
PHP:
function getFeeByPrice( $price )
{
	// Standard-Rückgabewert
	$retVal = 0;

	// Gebührentabelle
	$fees = array(
		0   => 0.50,    // Gebühr für Artikel ab   0 EUR
		2   => 0.60,    // Gebühr für Artikel ab   2 EUR
		10  => 0.70,    // Gebühr für Artikel ab  10 EUR
		25  => 0.80,    // Gebühr für Artikel ab  25 EUR
		100 => 0.90,    // Gebühr für Artikel ab 100 EUR
		250 => 1.50,    // Gebühr für Artikel ab 250 EUR
	);

	foreach( $fees as $key => $value ) {
		if( $price >= $key ) {
			$retVal = $value;
		}
	}
	return $retVal;
} 

echo getFeeByPrice(1.2);
 
Zurück