Alle prijzen updaten / afronden
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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..
}
?>
$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!
Gewijzigd op 07/02/2017 15:19:17 door Furio Scripting
Zoiets? Heb niet getest.
Trouwens $rows['prijs'] / 121 * 100 is toch de prijs excl BTW ipv incl?
Gewijzigd op 08/02/2017 12:44:03 door Joakim Broden
Ja dat is de BTW terugrekenen. Je kunt dit desgewenst korter noteren
BTW berekenen:
Gewijzigd op 07/02/2017 15:53:16 door Joakim Broden
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.
Dat is niet handig ;-)
Los daarvan, tussenwaarden afronden... mijn wiskunde-/natuurkundeleraar zou zich omdraaien in zijn graf als hij dit zag.
In stappen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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);
?>
// 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.
Gewijzigd op 07/02/2017 16:26:51 door Ward van der Put
Gewijzigd op 07/02/2017 16:35:11 door John D
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.
andersom
Code (php)
1
2
3
4
2
3
4
EXACT | AFGEROND
bedragIncl = 1,95 | 1,95
/ 121 * 21 = 0,3384 | 0,34 -
bedragExcl = | 1,61
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
Gewijzigd op 07/02/2017 23:09:55 door Frank Nietbelangrijk
$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
@Ivo, klopt heb je helemaal gelijk in. Slordig script van mij, even snel op mobiel getypt en ook niet getest.