Kommazahlen vergleichen

Fruitgum

Erfahrenes Mitglied
Hallo,


wie schaffe ich es Kommazahlen mit einander zu vergleichen? Also in meinem Fall ist es Kleiner Gleich:

Code:
error_reporting(E_ALL);
ini_set('display_errors', 1);

$packgewicht = 30.00;
$produkte = array();
$newPack = array();

$produkte[0] = array('gewicht' => '3.20', 'volume' => '0.02', 'aid' => '132');
$produkte[1] = array('gewicht' => '0.5', 'volume' => '0.02', 'aid' => '137');
$produkte[2] = array('gewicht' => '1', 'volume' => '0.02', 'aid' => '162');
$produkte[3] = array('gewicht' => '15.2', 'volume' => '0.02', 'aid' => '782');
$produkte[4] = array('gewicht' => '0.25', 'volume' => '0.02', 'aid' => '192');
$produkte[5] = array('gewicht' => '7', 'volume' => '0.02', 'aid' => '922');
$produkte[6] = array('gewicht' => '24', 'volume' => '0.02', 'aid' => '442');
$produkte[7] = array('gewicht' => '5.53', 'volume' => '0.02', 'aid' => '166');
$produkte[8] = array('gewicht' => '22.13', 'volume' => '0.02', 'aid' => '155');
$produkte[9] = array('gewicht' => '0.01', 'volume' => '0.02', 'aid' => '167');

$anzahlProdukte = count($produkte) - 1;
$packlist = 1;
$momGewicht = 0;
//var_dump($produkte);

for($i = 0; $i <= $anzahlProdukte;$i++) {
    
    if($produkte[$i]['gewicht'] <= $packgewicht && round($momGewicht) <= round($packgewicht)) {
        $newPack[$packlist][$i] = $produkte[$i]['aid'];
       // $newPack[$packlist][$i]['gewicht'] = $produkte[$i]['gewicht'];
        $momGewicht = round($momGewicht) + round($produkte[$i]['gewicht']);
    } else {
        $newPack[$packlist]['instgewicht'] = round($momGewicht) - round($produkte[$i]['gewicht']);
        $packlist++;
        $i--;
        $momGewicht = 0;
    }
 echo $momGewicht.'.'.$packlist.'<br>';
}

var_dump($newPack);


Ich brauch die Nachkomma-Stellen unbedingt! Ich habe schon mit Float, abs() und round probiert, irgendwie will das nicht klappen.
 
Hi,

1. Was versuchst du zu erreichen?
2. Was hast du versuchst?
3. Welche Probleme/Fehlermeldungen sind dabei aufgetreten?


Beantworte bitte diese Fragen, damit wir dir helfen können.
 
ich versuche größer/kleiner zu vergleichen in der for-schleife

Code:
if($produkte[$i]['gewicht'] <= $packgewicht && round($momGewicht) <= round($packgewicht))


packgewicht hat zb 30.50 kg und momGewicht wird errechnet. also sollte momGewicht nicht über 30.50 kommen, nur leider kann momGewicht auch 51.20 haben und es geht durch.
 
Ich würde darauf tippen, dass du die Kommazahlen als Strings und nicht als eigentliche Floats vorliegen hast.

Versuche mal folgendes:
PHP:
if(floatval($produkte[$i]['gewicht']) <= $packgewicht && round($momGewicht) <= round($packgewicht))
Natürlich überall wo du auf $produkte[$i]['gewicht'] zugreifst auch noch [phpf]floatval[/phpf] hinzufügen. Oder die Werte gleich im Anfangsarray ändern.
 
Nee geht nicht! bekomme zwar jetzt auch auch kommazahlen ausgegeben, aber der hat irgendwie ein Problem mit dem Float!


PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$packgewicht = floatval(30.00);
$produkte = array();
$newPack = array();

$produkte[0] = array('gewicht' => 3.20, 'volume' => '0.02', 'aid' => '132');
$produkte[1] = array('gewicht' => 0.5, 'volume' => '0.02', 'aid' => '137');
$produkte[2] = array('gewicht' => 1, 'volume' => '0.02', 'aid' => '162');
$produkte[3] = array('gewicht' => 15.2, 'volume' => '0.02', 'aid' => '782');
$produkte[4] = array('gewicht' => 0.25, 'volume' => '0.02', 'aid' => '192');
$produkte[5] = array('gewicht' => 7, 'volume' => '0.02', 'aid' => '922');
$produkte[6] = array('gewicht' => 24, 'volume' => '0.02', 'aid' => '442');
$produkte[7] = array('gewicht' => 5.53, 'volume' => '0.02', 'aid' => '166');
$produkte[8] = array('gewicht' => 22.13, 'volume' => '0.02', 'aid' => '155');
$produkte[9] = array('gewicht' => 0.01, 'volume' => '0.02', 'aid' => '167');

$anzahlProdukte = count($produkte) - 1;
$packlist = 1;
$momGewicht = floatval(0.0);


for($i = 0; $i <= $anzahlProdukte;$i++) {
    
    if(floatval($produkte[$i]['gewicht']) <= floatval($packgewicht) && floatval($momGewicht) <= floatval($packgewicht)) {
        $newPack[$packlist][$i] = $produkte[$i]['aid'];
      
        $momGewicht = $momGewicht + floatval($produkte[$i]['gewicht']);
    } else {
        $newPack[$packlist]['instgewicht'] = floatval($momGewicht) - floatval($produkte[$i]['gewicht']);
        $packlist++;
        $i--;
        $momGewicht = floatval(0.0);
    }
 echo $momGewicht.' Packet: '.$packlist.'<br>';
}

var_dump($newPack);


?>


wenn du mal den code ausprobieren willst. Er packt genau 2 päckchen, aber in packet 1 macht er 51 kilo rein. aber bei 30.50 ist eigentlich schluß.
 
Jut fehler gefunden! Dein Float war sehr wichtig, aber die if-abfrage brauchte schon die errechnete Position und nicht erst innerhalb der Abfrage wurde das päckchen dazuaddiert.
 
Zurück