Afronden 2 decimalen geeft 1 decimaal
Om maar gelijk met de deur in huis te vallen, het volgende script:
Code (php)
Deze berekend de BTW van het bedrag, het bedrag zonder BTW en telt deze bij elkaar op voor het totale bedrag.
Nu heb ik een bedrag (Dit is voor een online factuur) welke 11.50 is. Wat doet PHP, Deze zegt:
$Art_Prijs = 9,5
$BTW = 2
$Totaal = 11,5
Wat ik wil:
$Art_Prijs = 9,50
$BTW = 2,00
$Totaal = 11,50
Hoe doe ik dit?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$foo = "105";
echo number_format((float)$foo, 2, '.', ''); /* output: 105.00*/
?>
$foo = "105";
echo number_format((float)$foo, 2, '.', ''); /* output: 105.00*/
?>
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$Art_Prijs = money_format('%i',round($row->Bord_Prijs_Nieuw - ($row->Bord_Prijs_Nieuw / 121 * 21),2));
$BTW = money_format('%i',round($row->Bord_Prijs_Nieuw / 121 * 21,2));
$Totaal = money_format('%i',$Art_Prijs + $BTW);
?>
$Art_Prijs = money_format('%i',round($row->Bord_Prijs_Nieuw - ($row->Bord_Prijs_Nieuw / 121 * 21),2));
$BTW = money_format('%i',round($row->Bord_Prijs_Nieuw / 121 * 21,2));
$Totaal = money_format('%i',$Art_Prijs + $BTW);
?>
Toevoeging op 14/07/2014 21:00:08:
Top, dankje voor de stap in de goede richting. Ga ik naar de pagina van number_format krijg ik als andere optie ook money_format te zien. Bovenstaande werkte niet bij mij, onderstaand wel:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$Art_Prijs = money_format('%i',round($row->Bord_Prijs_Nieuw - ($row->Bord_Prijs_Nieuw / 121 * 21),2));
$BTW = money_format('%i',round($row->Bord_Prijs_Nieuw / 121 * 21,2));
$Totaal = money_format('%i',$Art_Prijs + $BTW);
?>
$Art_Prijs = money_format('%i',round($row->Bord_Prijs_Nieuw - ($row->Bord_Prijs_Nieuw / 121 * 21),2));
$BTW = money_format('%i',round($row->Bord_Prijs_Nieuw / 121 * 21,2));
$Totaal = money_format('%i',$Art_Prijs + $BTW);
?>
En vergeet niet dat je number_format (money_format) pas moet gebruiken als je de waardes wilt echoën.
Gewijzigd op 14/07/2014 22:37:56 door Frank Nietbelangrijk
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
// Gegeven: de prijs inclusief btw komt uit de database
$totaal = $row->Bord_Prijs_Nieuw;
// Artikelprijs exclusief btw berekenen:
$prijs_exclusief_btw = round($totaal / 1.21, 2);
// Dan is de btw:
$btw = $totaal - $prijs_exclusief_btw;
// Hierna pas de getallen omzetten in strings:
$prijs_exclusief_btw = number_format($prijs_exclusief_btw, 2, ',', '.');
$btw = number_format($btw, 2, ',', '.');
$totaal = number_format($totaal, 2, ',', '.');
?>
// Gegeven: de prijs inclusief btw komt uit de database
$totaal = $row->Bord_Prijs_Nieuw;
// Artikelprijs exclusief btw berekenen:
$prijs_exclusief_btw = round($totaal / 1.21, 2);
// Dan is de btw:
$btw = $totaal - $prijs_exclusief_btw;
// Hierna pas de getallen omzetten in strings:
$prijs_exclusief_btw = number_format($prijs_exclusief_btw, 2, ',', '.');
$btw = number_format($btw, 2, ',', '.');
$totaal = number_format($totaal, 2, ',', '.');
?>
in bijvoorbeeld het script van Ward heeft $btw 2 soorten inhoud.
op regel 7 komt er en getalswaarde in te staan.
Net als op regel 3 $totaal een getalswaarde bevat.
Op regel 10 en 11 krijgen $btw en $totaal een inhoud waarmee niet meer gerekend mag worden.
Met een beetje pech staat dat 10+ regels uitelkaar.
En als iemand een maand of wat later het script moet aanpassen, en bijvoorbeeld een sommatie aan het einde nodig heeft, dan zou hij kunnen bedenken om $totaal te gebruiken
Maar dan raak je alles achter de decimale komma kwijt.
Ik zou dus ofwel $btw vervangen door $fBtw en $sBtw om het onderscheid te blijven zien,
of ik zou mezelf aan mijn eigen regel houden dat ik number_format alleen gebruik in een echo
Tevens zie ik dat jullie hier toch number_format gebruiken. Wat is daar het voordeel uit ten opzichte van money_format?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$totaal = 12.95;
$totaal = number_format($totaal, 2,',','');
echo $totaal; // 12,95
$mettoeslag = $totaal + 1;
echo $mettoeslag; // 13 en dus niet 13.95
?>
$totaal = 12.95;
$totaal = number_format($totaal, 2,',','');
echo $totaal; // 12,95
$mettoeslag = $totaal + 1;
echo $mettoeslag; // 13 en dus niet 13.95
?>
number_format maakt (als je een ander teken dan de punt gebruikt als scheidingsteken) dat het getal niet alleen wordt afgekapt op 2 decimalen, maar ook dat het een string wordt.
Als je vervolgens gaat rekenen met die string probeert PHP er zo goed mogelijk een getal van te maken.
$som zal hiermee dus 17 worden.
En dat geldt dus ook als je een komma gebruikt:
$string = '12,24 volt omvormer';
Zal ook tot 12 vervallen als je gaat rekenen.
Nadeel van het losse variabelen-type beleid in PHP
Top, het is mij duidelijk. Bedankt voor de uitleg!