$waarde gebruiken voor berekening ( percentages ) in php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Carmelo Mormina

Carmelo Mormina

04/04/2020 15:03:37
Quote Anchor link
Hallo Allemaal,

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $item['order_price']; ?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $totaalbedrag = str_replace(array('&euro;', '&nbsp;'), 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...
 
PHP hulp

PHP hulp

26/05/2020 11:34:27
 
- SanThe -

- SanThe -

04/04/2020 15:39:01
Quote Anchor link
Dus je hebt het euroteken ook in de database staan?
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.
 
Carmelo Mormina

Carmelo Mormina

04/04/2020 15:43:22
Quote Anchor link
Hallo SanThe,

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?
 
Thomas van den Heuvel

Thomas van den Heuvel

04/04/2020 15:48:48
Quote Anchor link
Zoals @SanThe al aangeeft zou je dit bedrag niet moeten reverse-engineering uit een database of PDF-bestand ofzo. Deze zou ergens in een geldig "intern" numeriek formaat opgeslagen moeten zijn.

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
 
Bart V B

Bart V B

04/04/2020 16:11:48
Quote Anchor link
Tis een pleister maar volgens mij zou het zo kunnen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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('&euro;', '&nbsp;', '€', '.','.'), 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");
?>
 
Adoptive Solution

Adoptive Solution

04/04/2020 16:25:33
Quote Anchor link
<pre>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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 />';

?>

</pre>
Gewijzigd op 04/04/2020 16:31:16 door Adoptive Solution
 
- SanThe -

- SanThe -

04/04/2020 16:27:46
Quote Anchor link
Dat blijft gokken dat het format is wat jij denkt dat het is.
Stel men gebruikt de komma voor de duizend en de punt voor de restwaarde.
€ 5,594.85

Gaat niet echt goed.
 
Adoptive Solution

Adoptive Solution

04/04/2020 16:32:17
Quote Anchor link
Oh wat ben je briljant.
 
Carmelo Mormina

Carmelo Mormina

04/04/2020 16:39:22
Quote Anchor link
Het is gelukt, ik ben er uit ;-)
Onderstaande code doet precies wat ik nodig heb.
Iedereen bedankt voor jullie hulp!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 = &euro; ";
echo $order->get_total();

echo "<br /><br />";

$bedrag_75 = $order->get_total() * 0.75;
echo "Bedrag 75% = &euro; ";
echo (round($bedrag_75, 2));

echo "<br />";

$bedrag_25 = $order->get_total() * 0.25;
echo "Bedrag 25% = &euro; ";
echo (round($bedrag_25, 2));

?>
 



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.