05 cze Czerwiec 05, 2012

Wylicz kwotę netto z kwoty brutto

lukasz 0 PHP

Wiemy jak wyliczyć kwotę brutto mając kwotę netto i podatek.

  $gross = round($net * $tax + $net, 2);

Co jednak, gdy mamy odwrotną sytuację?

Wydawałoby się to trywialnie proste, wystarczy odwrócić wzór, i mamy

  $net = round($gross / (1 + $tax), 2);

Jednak nie daje ona zawsze poprawnej odpowiedzi. Dlaczego? Wyliczając cenę netto, zaokrąglamy ją do 2 miejsca po przecinku (1 przykład). Automatycznie wzór z drugiego przykładu nie jest prawdziwy we wszystkich przypadkach.

Zamieszczam moje rozwiązanie tego problemu:

/**
 * Calculate net price from gross and tax
 *
 * @author programista.it
 * @url http://programista.it/2012/06/05/wylicz-kwote-netto-z-kwoty-brutto/
 *
 * @var double The gross price
 * @var double The tax
 *
 * @return double|false The net price|false if not exists
 */
function gross2net($gross, $tax) {
  // prepare variables
  if($tax > 1) $tax = 1;
  if($tax < 0) $tax = 0;
  $gross = round($gross, 2);
  $tax = round($tax, 2);
  // calculate range to check
  $min_net = round($gross / (1 + $tax + 0.01), 2);
  $max_nex = round($gross / (1 + $tax - 0.01), 2);
  // check in range
  for($net = $min_net; $net <= $max_nex; $net += 0.01) {
    $check = round($net + $net * $tax, 2);
    if($check == $gross) {
      return $net; // found net price
    }
  }
  return false; // not found net price
}

Na razie jako funkcja, może później złożę z tego jakąś klasę ;)

Nie znaleziono żadnych powiązanych wpisów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *