2017-01-25 6 views
0

In erster Linie habe ich SO gesucht, und hatte nicht viel Glück mit den anderen Vorschlägen, oder ich verstehe nicht wegen der Komplexität der OP-Frage.Funktionen werfen Division durch Null Fehler

Ich habe zwei Funktionen, die Division Zero Warnungen werfen.

Wie würde ich das lösen? Ich habe versucht, die Logik mit isset(), empty() zu validieren, aber es scheint immer noch zu sein.

Kann mir jemand erklären, wo ich falsch liege?

schätze ich jegliche Hilfe :)

function roundUpToAny($MaterialCountNeeded, $CoverageMinimum) { 
    if (!isset($MaterialCountNeeded) AND !isset($CoverageMinimum)) { 
     $ReturnedValue = 0; 
    } 
    if ($MaterialCountNeeded === 0 & $CoverageMinimum === 0 || $CoverageMinimum === 0) { 
     $ReturnedValue = 0; 
    } 
    else { 
    $ReturnedValue = (ceil($MaterialCountNeeded) % $CoverageMinimum === 0) ? ceil($MaterialCountNeeded) : round(($MaterialCountNeeded + $CoverageMinimum/2)/$CoverageMinimum) * $CoverageMinimum; 
    } 
    return $ReturnedValue; 
} 


function SumQuantityNeeded($Count, $Coverage) { 
    if ($Count > 0) { 
     $OrderMaterialCount = roundUpToAny($Count, $Coverage); 
     $MinimumUnitAmount = $OrderMaterialCount/$Coverage; 
     return round($MinimumUnitAmount,$Coverage); 
    } else { 
     return $MinimumUnitAmount = 0; 
    } 
} 

Fehler treten aus MinimumUnitAmount = $OrderMaterialCount/$Coverage; und $ReturnedValue = (ceil($MaterialCountNeeded) % $CoverageMinimum === 0) ? ceil($MaterialCountNeeded) : round(($MaterialCountNeeded + $CoverageMinimum/2)/$CoverageMinimum) * $CoverageMinimum;

Diese Funktionen sind Funktionen 'Helfer'. Andere Funktionen verwenden diese, so dass ich in den falschen Eimer schauen kann ...

+0

Was ist der Wert, den Sie an 'SumQuantityNeeded()' für '$ Coverage' übergeben, und was würde passieren, wenn dieser Wert eine 0 wäre? –

Antwort

1

In der ersten scheint es, Sie müssen nur überprüfen, der zweite Parameter ist nicht Null.

function roundUpToAny($MaterialCountNeeded, $CoverageMinimum) { 
    if (is_numeric($CoverageMinimum) && $CoverageMinimum > 0) { 
     return (ceil($MaterialCountNeeded) % $CoverageMinimum === 0) ? ceil($MaterialCountNeeded) : round(($MaterialCountNeeded + $CoverageMinimum/2)/$CoverageMinimum) * $CoverageMinimum; 
    } 

    return 0; 
} 

In der zweiten, sollten Sie $Coverage werden überprüft und nicht $Count:

function SumQuantityNeeded($Count, $Coverage) { 
    if ($Coverage > 0) { 
     $OrderMaterialCount = roundUpToAny($Count, $Coverage); 
     $MinimumUnitAmount = $OrderMaterialCount/$Coverage; 
     return round($MinimumUnitAmount, $Coverage); 
    } 

    return 0;  
} 

ich vereinfacht auch die Funktionen ein wenig.

+0

Ahhh Hah! Ich kratzte mich am Kopf, als ob ich falsch liege. Danke für den Refactor und die Korrektur. Wirklich zu schätzen :) – Kray

+0

Arbeitete einwandfrei – Kray