Afronden 2 decimalen geeft 1 decimaal

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peter  Flos

Peter Flos

14/07/2014 18:35:41
Quote Anchor link
Avond,

Om maar gelijk met de deur in huis te vallen, het volgende script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$Art_Prijs
= round($row->Bord_Prijs_Nieuw - ($row->Bord_Prijs_Nieuw / 121 * 21),2);
$BTW = round($row->Bord_Prijs_Nieuw / 121 * 21,2);
$Totaal = $Art_Prijs + $BTW;
?>

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?
 
PHP hulp

PHP hulp

25/04/2024 02:34:42
 

14/07/2014 18:46:08
Quote Anchor link
Ik denk ongeveer zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

    $foo
= "105";
    echo number_format((float)$foo, 2, '.', ''); /* output: 105.00*/

?>
 
Peter  Flos

Peter Flos

14/07/2014 21:00:07
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

14/07/2014 22:06:23
Quote Anchor link
Zou het nou niet handiger zijn om een paar functies te maken die het rekenwerk verrichten?

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
 
Ward van der Put
Moderator

Ward van der Put

15/07/2014 09:36:00
Quote Anchor link
Je voert een overbodige berekening uit. Van de prijs inclusief btw bereken je de prijs exclusief btw plus het btw-bedrag. Prima. Vervolgens tel je beide weer op om de prijs inclusief btw te berekenen; die wist je echter al.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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, ',', '.');
?>
 
Ivo P

Ivo P

15/07/2014 09:59:34
Quote Anchor link
number_format() zou je alleen in combinatie met echo moeten gebruiken, of op een plek waar je een string met output opbouwt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $html = 'de prijs is '. number_format(); ?>


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
 
Peter  Flos

Peter Flos

15/07/2014 11:00:28
Quote Anchor link
Misschien heb ik het nog niet door, maar wat verschilt het als ik money_format pas toepas bij de echo, inplaats van bij de variabele? Geeft het een foutmelding, is het PHP-Technisch onjuist, of iets anders?


Tevens zie ik dat jullie hier toch number_format gebruiken. Wat is daar het voordeel uit ten opzichte van money_format?
 
Ivo P

Ivo P

15/07/2014 11:12:11
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

?>


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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$string
= '12volts lampje 8 Watt';

$som = $string + 5 ;

?>


$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
 
Peter  Flos

Peter Flos

15/07/2014 12:21:34
Quote Anchor link
Top, het is mij duidelijk. Bedankt voor de uitleg!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.