$waarde gebruiken voor berekening ( percentages ) in php
Ben al een geruime tijd bezig iets voor elkaar te krijgen.
Mijn (zéér) beperkte kennis van PHP zorgt er echter voor dat ik dit maar niet voor elkaar krijg.
Een korte uitleg van wat ik zoek...
Ik wil graag een $waarde-x opdelen naar 2 $waarden ( 1x 75% van waarde-x en 1x 25% van $waarde-x )
In php lekentaal dus zoiets als:
$waarde_75 = $waarde-x / 4 * 3; ( met 2 decimalen achter de komma )
$waarde_25 = $waarde-x / 4 * 1; ( met 2 decimalen achter de komma )
De reden hiervoor is dat ik op een (PDF) bestelbon een totaalbedrag wil opsplitsen naar 2 bedragen.
Het eerste bedrag (75%) is het bedragdeel wat betaald moet worden middels een bankoverschrijving.
Het tweede bedrag (25%) is het bedragdeel wat contant betaald moet worden.
Bij elkaar opgeteld dienen deze twee bedragen natuurlijk weer exact hetzelfde te zijn als het totaalbedrag.
In de php code van het bestand dat deze PDF genereerd, wordt onderstaande code gebruikt voor weergave van het totaalbedrag:
Op de PDF verschijnd hier dan vervolgens het bedrag als volgt: € 5.594,85
Ik begrijp dat dit niet een waarde is welke gebruikt kan worden voor berekeningen.
Dus heb ik het volgende gedaan om het euro teken en de spatie te verwijderen.
Code (php)
1
<?php $totaalbedrag = str_replace(array('€', ' '), array('', ''), $item['order_price']); ?>
Dit zorgt er voor dat alleen het bedrag over blijft.
Maar dit is nog steeds niet een waarde die gebruikt kan worden voor berekeningen in php.
Nu heb ik via zoeken en zoeken op internet van alles geprobeerd middels floats, int, etc.
Maar mijn kennis van php is helaas te beprekt om hier een werkende oplossing voor te vinden.
Op dit moment ben ik dan ook compleet vast gelopen en kom eenvoudig niet meer verder.
Ik hoop dat iemand mij op weg zou kunnen helpen om het bovengenoemde te kunnen realiseren.
Alle hulp wordt zeer op prijs gesteld...
Dan is het tekst en met tekst kan je niet rekenen.
Zorg dat het getal in de database ook een getal is.
Dan kan je van alles berekenen.
Dat euroteken zet je er pas bij als je het als tekst wil presenteren.
Hartelijk dank voor je reactie.
Hoe het in de database staat kan ik helaas niet wijzigen.
Weet je misschien wel hoe ik dan de text kan laten omzetten/interpreteren als een getal?
In PHP is het decimaal scheidingsteken een punt (.).
Het bedrag zou dus van de vorm 5594.85 moeten zijn om er mee te kunnen rekenen. Let er ook op dat er een verschil is tussen het decimale getal 5594.85 en de string '5594.85'. Als er onduidelijkheid is over het type van de variabele zou je deze altijd kunnen inspecteren met var_dump().
In die vorm (met een punt als scheidingsteken) zou je dat bedrag ook op moeten slaan in de database als je hier gebruik van maakt om ervoor te zorgen dat je hier direct mee kunt rekenen ("gebruiksklaar" is).
Op het moment dat je deze op een bepaalde manier moet presenteren (webpagina, PDF et cetera) kun je van functies als number_format() gebruik maken om deze het gewenste uiterlijk te geven.
EDIT: het is niet bepaald optimaal als dit bedrag zo in de database zit. Nu moet je namelijk extra code schrijven en dus via een workaround aan het bedrag in het gewenste formaat komen. Als je dan bent aangewezen op deze string zou je aan het eind van de bewerking ook nog een zogenaamde typecast uit kunnen voeren op deze string om deze om te zetten naar een zogenaamde float. Dit doe je met (float). Maar dit verdient dus niet echt een schoonheidsprijs.
Gewijzigd op 04/04/2020 15:54:07 door Thomas van den Heuvel
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$fmt = new NumberFormatter( 'nl_NL', NumberFormatter::CURRENCY );
echo $item['order_price'] = '€ 5.594,85';
echo '<br>';
$totaalbedrag = str_replace(array('€', ' ', '€', '.','.'), array('', '', '','','.'), $item['order_price']);
$totaalbedrag = str_replace(',', '.', $totaalbedrag);
$driekwart = $totaalbedrag / 4 * 3 ;
echo $fmt->formatCurrency($driekwart, "EUR");
echo '<br>';
$kwart = $totaalbedrag /4 * 1;
echo $fmt->formatCurrency($kwart, "EUR");
?>
$fmt = new NumberFormatter( 'nl_NL', NumberFormatter::CURRENCY );
echo $item['order_price'] = '€ 5.594,85';
echo '<br>';
$totaalbedrag = str_replace(array('€', ' ', '€', '.','.'), array('', '', '','','.'), $item['order_price']);
$totaalbedrag = str_replace(',', '.', $totaalbedrag);
$driekwart = $totaalbedrag / 4 * 3 ;
echo $fmt->formatCurrency($driekwart, "EUR");
echo '<br>';
$kwart = $totaalbedrag /4 * 1;
echo $fmt->formatCurrency($kwart, "EUR");
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
// (5594.85*.75)+(5594.85*.25)
$pin = .75;
$cash = .25;
$factuur = '€ 5594.85';
echo 'Factuur = ' . $factuur . '<br />';
$factuur = floatval( substr( $factuur, 3, 100 ) );
echo 'Factuur = ' . $factuur . '<br /><br />';
$pinnen = $factuur * $pin;
$contant = $factuur * $cash;
echo 'Pinnen (' . $pin * 100 . '%) = ' . $pinnen . '<br />';
echo 'Contant (' . $cash * 100 . '%) = ' . $contant . '<br /><br />';
$verschil = $contant - (int) $contant; // makkelijk betalen zonder wisselgeld
echo 'Verschil = ' . $verschil . '<br /><br />';
$pinnen += $verschil;
$contant -= $verschil;
echo 'Pinnen = ' . $pinnen . '<br />';
echo 'Contant = ' . $contant . '<br /><br />';
$totaal = $pinnen + $contant ;
echo 'Totaal = ' . $totaal . '<br />';
?>
// (5594.85*.75)+(5594.85*.25)
$pin = .75;
$cash = .25;
$factuur = '€ 5594.85';
echo 'Factuur = ' . $factuur . '<br />';
$factuur = floatval( substr( $factuur, 3, 100 ) );
echo 'Factuur = ' . $factuur . '<br /><br />';
$pinnen = $factuur * $pin;
$contant = $factuur * $cash;
echo 'Pinnen (' . $pin * 100 . '%) = ' . $pinnen . '<br />';
echo 'Contant (' . $cash * 100 . '%) = ' . $contant . '<br /><br />';
$verschil = $contant - (int) $contant; // makkelijk betalen zonder wisselgeld
echo 'Verschil = ' . $verschil . '<br /><br />';
$pinnen += $verschil;
$contant -= $verschil;
echo 'Pinnen = ' . $pinnen . '<br />';
echo 'Contant = ' . $contant . '<br /><br />';
$totaal = $pinnen + $contant ;
echo 'Totaal = ' . $totaal . '<br />';
?>
</pre>
Gewijzigd op 04/04/2020 16:31:16 door Adoptive Solution
Stel men gebruikt de komma voor de duizend en de punt voor de restwaarde.
€ 5,594.85
Gaat niet echt goed.
Oh wat ben je briljant.
Onderstaande code doet precies wat ik nodig heb.
Iedereen bedankt voor jullie hulp!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$order->get_id();
$order->get_order_key();
$get_order_total = floatval( preg_replace( '#[^\d.]#', '', $order->get_formatted_order_total() ) );
echo "Totaalbedrag = € ";
echo $order->get_total();
echo "<br /><br />";
$bedrag_75 = $order->get_total() * 0.75;
echo "Bedrag 75% = € ";
echo (round($bedrag_75, 2));
echo "<br />";
$bedrag_25 = $order->get_total() * 0.25;
echo "Bedrag 25% = € ";
echo (round($bedrag_25, 2));
?>
$order->get_id();
$order->get_order_key();
$get_order_total = floatval( preg_replace( '#[^\d.]#', '', $order->get_formatted_order_total() ) );
echo "Totaalbedrag = € ";
echo $order->get_total();
echo "<br /><br />";
$bedrag_75 = $order->get_total() * 0.75;
echo "Bedrag 75% = € ";
echo (round($bedrag_75, 2));
echo "<br />";
$bedrag_25 = $order->get_total() * 0.25;
echo "Bedrag 25% = € ";
echo (round($bedrag_25, 2));
?>