Goedemiddag Forumleden,

Ik heb een tabel met daarin prijzen excl btw maar de prijzen zijn allemaal niet afgerond dus veel prijzen als 114,04 en 118,22..

Nu wil ik alle prijzen gaan updaten en enkel de volgende cijfers achter de comma zien: ,25 - ,50 - ,75 - ,95.

Ik dacht zoiets:

<?php
$q = 'SELECT * FROM ps_product';
$result = $database->query($q);

while ($rows = mysqli_fetch_assoc($result))
{
   
$totaalPrijsincBtw = $rows['prijs'] / 121 * 100; // voorbeeld 114,04.

// Dan kijken naar de cijfers achter de comma, als deze boven de 0 en tussen de 25 zit dan maken we er ,24 van...

// Als het bedrag tussen de 25 en 50 zit maken we er 0,50 van..

// Als het bedrag tussen de 50-75 zit maken we er 0,75 van..

// Als het bedrag tussen 75 en 99 zit maken we er 0,95 van..

}

?>


Maar hoe kunnen we kijken achter de comma's en een if else daarop maken en de cijfers updaten?

Ik hoor het graag!

<?php
	Code van Ward van der Put is beter
?>

Zoiets? Heb niet getest.

Trouwens $rows['prijs'] / 121 * 100 is toch de prijs excl BTW ipv incl?
>> Trouwens $rows['prijs'] / 121 * 100 is toch de prijs excl BTW ipv incl?

Ja dat is de BTW terugrekenen. Je kunt dit desgewenst korter noteren

<?php
$btw = 0.21;
$excl_btw = $incl_btw / (1 + $btw);
?>

BTW berekenen:
<?php
$btw = 0.21;
$incl_btw = $excl_btw * (1 + $btw);
?>
Ja klopt, maar omdat de var $totaalPrijsincBtw (inc) heet wat dus niet inc is.
Je zegt: ik heb een tabel met daarin prijzen excl btw en vervolgens ga je dat behandelen alsof het een incl BTW prijs is?? $totaalPrijsincBtw = $rows['prijs'] / 121 * 100;
Welke prijs wil je nu "mooi" maken want uiteindelijk is een van beide een nette prijs en de ander een deelsom die altijd minder mooi uitvalt.
>> Ja klopt, maar omdat de var $totaalPrijsincBtw (inc) heet wat dus niet inc is.

Dat is niet handig ;-)
Los daarvan, tussenwaarden afronden... mijn wiskunde-/natuurkundeleraar zou zich omdraaien in zijn graf als hij dit zag.
Niet gaan rommelen met een if/elseif/else. Er is een simpele rekenregel. Voor de rij .00, .25, .50, .75 kun je vermenigvuldigen met 4, daarna afronden op een geheel getal en tot slot delen door 4.

In stappen:

<?php
// Aselecte prijs exclusief btw
$prijs_excl_btw = mt_rand(100, 20000) / 100;

// Vermenigvuldigen met 1,21 voor 21% btw
$prijs_incl_btw = 1.21 * $prijs_excl_btw;
$prijs_incl_btw = round($prijs_incl_btw, 2);

// Vermenigvuldigen met 4, casten naar integer en weer delen door 4
$afgeronde_prijs_incl_btw = 4 * $prijs_incl_btw;
$afgeronde_prijs_incl_btw = (int)$afgeronde_prijs_incl_btw;
$afgeronde_prijs_incl_btw = $afgeronde_prijs_incl_btw / 4;

// Test
echo '<pre>';
var_dump($prijs_excl_btw, $prijs_incl_btw, $afgeronde_prijs_incl_btw);
?>


Voor veelvouden van 5 cent (,05, .10, .15 enzovoort) reken je met 20 in plaats van 4.
De prijs incl BTW afronden? Volgens mij mag dat boekhoudkundig niet. Het is een centenkwestie maar zodra je de incl BTW prijs gaat afronden veranderd ook de BTW mee. BTW die de inspecteur graag binnen wil zien komen. Ik ben al eens teruggefloten door een accountant omdat we dat hadden gedaan in een systeem. "Mooie prijzen gemaakt" mocht niet. Uiteraard tenzij je bij de afrekening aan de consument de BTW opnieuw bepaalt en als zodanig op de factuur zet natuurlijk. Dan is het natuurlijk ook zinvol om de "nieuwe" ex BTW prijs in je tabel te hebben.
Kleine afrondverschillen hou je altijd maar de optelsom bedragExcl + BTW moet natuurlijk exact het bedrag inclusief BTW zijn.
En daarnaast moet het BTW percentage zo dicht mogelijk bij het voorgeschreven percentage zitten. Ik bedoel dat de afwijking minder moet zijn dan 1 eurocent.


             EXACT   | AFGEROND
bedragExcl = 1,61    |   1,61
21% BTW    = 0,3381  |   0,34 +
Totaal     =         |   1,95


andersom

             EXACT   | AFGEROND
bedragIncl = 1,95    |   1,95
/ 121 * 21 = 0,3384  |   0,34 -
bedragExcl =         |   1,61


De uitkomst bereken je dus niet exact maar met de afgeronde waardes om te zorgen dat het sommetje na afronding nog klopt
@Joakim

$prijs = explode(',' $prijs);

oei. Een getal bevat geen komma. Hooguit een punt.

Maar dan nog, zou je mi. beter af zijn om de prijs als een getal te beschouwen.
Daarnaast verander je de inhoud van $prijs van een getal naar een array. Gebruik dan liever een nieuwe naam. Of ga direct naar de centen toe:

$centen = $prijs - floor($prijs);


Merkt trouwens ook op dat je het geval mist als de decimalen precies 0 zijn. Je rondt dan af naar 25 ct

Reageren