Ich habe ein in PHP geschriebenes Projekt geerbt, das ein Kassenbuch mit doppeltem Eintrag hat, das erfordert, dass der Betrag, der eingeht, dem ausgehenden Betrag entspricht.Einfache Addition und Subtraktion funktioniert nicht richtig
Bei der Validierung von Zahlen, die über ein Formular eingegeben wurden (um herauszufinden, ob es gleich Null ist), wird der folgende Code ausgeführt, bis eine Dezimalzahl erscheint, die einen zufälligen Wert anzeigt.
Im folgenden Beispiel gibt es eine wirklich winzige Zahl von 53,87 - 53,87, die Null sein sollte. Diese wurde entfernt, um andere Dinge davon abzuhalten, Probleme zu verursachen, also habe ich eine Menge der Eingangsvalidierung entfernt usw.
<?php $inputs = array(
array(
"in" => '',
"out" => '249.6',
),
array(
"in" => '',
"out" => '396',
),
array(
"in" => '554.4',
"out" => ''
),
array(
"in" => '145.07',
"out" => ''
),
array(
"in" => '',
"out" => '53.87',
),
);
$fTotal = 0;
echo "Start at 0: ";
foreach($inputs as $key=>$sRef) {
$itemValid = true;
$aItem = array();
$amountIn = $inputs[$key]['in'];
$amountOut = $inputs[$key]['out'];
if ($itemValid) {
echo "'".$fTotal."'";
$is_in = 0;
if ($amountIn > 0.0) {
$is_in = 1;
echo "+";
$amount = $amountIn;
$fTotal = $fTotal + $amountIn;
} else {
$is_in = 0;
echo "-";
$amount = $amountOut;
$fTotal = $fTotal - $amountOut;
}
echo "'".$amount."'=";
echo "'".$fTotal."' | ";
$aItem["is_in"] = $is_in;
$aItem["amount"] = $amount;
$aItems[] = $aItem;
}
}
Sie können diese here auf einer Sandbox ausgeführt. Hier
ist die erwartete Ausgabe:
Start bei 0: 0 '- '249.6'= '- 249.6' | '-249.6' - '396' = '- 645.6' | '-645.6' + '554.4' = '- 91.2' | '-91.2' + '145.07' = '53.87' | '53 .87 '-' 53.87 '=' 0 '| Hier
ist die tatsächliche Ausgabe:
Start bei 0: 0 '- '249.6'= '- 249.6' | '-249.6' - '396' = '- 645.6' | '-645.6' + '554.4' = '- 91.2' | '-91.2' + '145.07' = '53.87' | '53 .87 '-' 53.87 '=' - 4.9737991503207E-14 '|
Was ist hier falsch?
aktualisieren
Nach Hilfe unten, here's the working code für alle, die in Zukunft auf diese stolpert.