1.700.00 opslaan en weergeven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Mohamed nvt

Mohamed nvt

04/10/2017 11:19:23
Quote Anchor link
Update 1:

Ik zit nog steeds met dit probleem, want het lukt me niet om het op te lossen:

Ik probeer het op volgende manier op te lossen en zou graag willen weten of deze stappen juist zijn:
1. aan het einde van een getal controleren of exact 000 er zijn.
2. En als die exact 000 er zijn dan vervangen door ,- of enkel .
3. En anders gewoon het volledige getal weer te geven, wat dus ingevoerd is in DB.
Gewijzigd op 04/10/2017 11:19:50 door Mohamed nvt
 
PHP hulp

PHP hulp

22/12/2024 12:57:27
 
Ben van Velzen

Ben van Velzen

04/10/2017 11:24:25
Quote Anchor link
Waarom kijk je dan niet gewoon of het ongeformatteerde getal een geheel getal is? Dan hoef je ook geen gekke stringvergelijkingen te doen.
 
Mohamed nvt

Mohamed nvt

04/10/2017 11:28:09
Quote Anchor link
Jah dat is een goeie.
Ik ga ernaar kijken.
Tnx!

Toevoeging op 04/10/2017 13:27:01:

Update:

Ik heb gezocht naar hoe een geheel getal gevonden kan worden en kwam eigenlijk verschillende functies tegen zoals is_float, maar is_nummeric werkt beter dan is_float.

Onderstaande werkt bijna zoals ik het wil, maar niet helemaal helaas.
Wanneer ik 20000 invul, dan verschijnt 20,000 = het resultaat is prima, maar wil geen komma, maar een punt. Ik weet niet of ik straks problemen krijg met optellen en/of aftrekken of andere berekeningen.
wanneer ik 20000.750 invul, dan verschijnt 20,001 = en dit is een no go voor mij.

Nog andere ideeën?
Btw; de commenteerde code heb ik ook getest, maar dat werkte ook niet helaas. Deze code had wel mijn voorkeur, aangezien het hier gaat om geld.
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
$valuta = $row['purchaseprice'];
        
        if (is_numeric($valuta)){
            /*setlocale(LC_MONETARY,"ar-IQ");
            echo money_format("%.2n", $valuta);*/
            echo number_format($row['purchaseprice']);
            
        } else {
            /*setlocale(LC_MONETARY,"ar-IQ");
            echo money_format("%.2n", $valuta);*/
            echo number_format($row['purchaseprice'], 3, ',','.');
            
        }
    ?>

 
Ben van Velzen

Ben van Velzen

04/10/2017 13:44:07
Quote Anchor link
Je kunt niet rekenen met geformatteerde getallen dus de eventuele problemen die je krijgt krijg je altijd als je zoiets gaat proberen.

Doe eens zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$decimals
= ctype_digit($row['purchaseprice']) ? 0 : 3;
echo number_format($row['purchaseprice'], $decimals, '.', '.'); // je wilde immers punten.
?>
 
Mohamed nvt

Mohamed nvt

04/10/2017 13:51:42
Quote Anchor link
Hallo Ben,
Bedoel je te zeggen dat ik altijd met de originele bedragen moet berekenen?

Jouw suggestie heb ik nog niet getest, maar dat ga ik nu doen.
Tnx!

Toevoeging op 04/10/2017 13:55:56:

Ik heb je code getest, maar eigenlijk is de output zoals voorheen:
Dus 20.000 wordt 20.000.000
En 20.000.750 wordt gewoon 20.000.750

Ik weet niet helemaal zeker, maar volgens mij heb ik een if statement nodig die controleert of er echt alleen nullen zijn na het tweede punt en als het klopt, dan moeten die nullen verwijderd worden. Anders gewoon het bedragen weergeven.

Als je een beter idee hebt, dan hoor ik dat graag.
 
Ben van Velzen

Ben van Velzen

04/10/2017 14:12:58
Quote Anchor link
Ja, je moet altijd met originele bedragen rekenen, met geformatteerde getallen kun je niet rekenen.
Wat staat er dan letterlijk in $row['purchaseprice']? Hier mag geen formattering in staan. Dus als je 20.000 als resultaat wil hebben zal daar 20000 in moeten staan.
Gewijzigd op 04/10/2017 14:13:34 door Ben van Velzen
 
Mohamed nvt

Mohamed nvt

04/10/2017 14:18:04
Quote Anchor link
Oke, dus ik zal moeten rekenen met de originele bedragen.

In de DB staat letterlijk: 20000.0000 en voor het tweede bedrag 20000.7500.
Extra info: voor de kolom type gebruik ik decimal 15,4
 
Ben van Velzen

Ben van Velzen

04/10/2017 14:29:27
Quote Anchor link
Probeer het eens zo, gebruik makend van type coercion in PHP:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$decimals
= (double)$row['purchaseprice'] == (int)$row['purchaseprice'] ? 0 : 3;
echo number_format($row['purchaseprice'], $decimals, '.', '.'); // je wilde immers punten.
?>
 
Mohamed nvt

Mohamed nvt

04/10/2017 14:49:31
Quote Anchor link
Yes, dit is precies goed!
20.000 wordt gewoon 20.000 en 20.000.500 wordt gewoon 20.000.500.
Heel erg bedankt Ben voor de moeite! ;-)

Ik zou graag willen begrijpen wat bovenstaande code precies doet, al heb ik wel een idee, maar snap ik niet helemaal, want mocht het nodig zijn dat ik eventueel het probleem zelf kan oplossen.
Zou je nog het eea willen toelichten?
Gewijzigd op 04/10/2017 14:50:10 door Mohamed nvt
 
Ward van der Put
Moderator

Ward van der Put

04/10/2017 14:59:16
Quote Anchor link
Mwa, nu gebruik je de punt als scheidingsteken voor duizendtallen en als scheidingsteken voor decimalen. Dit betekent dat twintigduizend euro wordt getoond als 20.000 en twintigduizend euro plus vijftig cent als 20.000.500 dus hetzelfde als twintig miljoen en vijfhonderd euro.
 
Ben van Velzen

Ben van Velzen

04/10/2017 15:16:11
Quote Anchor link
Ward, ik vind het ook vreemd, en dat blijkt ook niet zo gek te zijn omdat Mohamed schijnbaar niet weet hoe de formatting in Irak werkt. Hint: in Irak worden komma's gebruikt voor duizendtallen en punten voor decimalen.
 
Adoptive Solution

Adoptive Solution

04/10/2017 15:17:56
 
Ben van Velzen

Ben van Velzen

04/10/2017 15:22:21
Quote Anchor link
En de relevantie daarvan is, wat precies?

Voor de grap even wat Arabische formattering erbij gepakt. Mohammed, let op:

Arabic - Saudi Arabia 1,234.56
Arabic - Iraq 1,234.56
Arabic - Egypt 1,234.560
Arabic - Algeria 1,234.56
Gewijzigd op 04/10/2017 15:25:51 door Ben van Velzen
 
Mohamed nvt

Mohamed nvt

04/10/2017 16:02:54
Quote Anchor link
Hallo Ben,

Eigenlijk klopt bovenstaande info over Irak niet en volgens mij is het zelfs out of date, want dat had ik zelf al gevonden en overlegd met de lokale mensen en toen zei men dat er niets van klopt.
Volgens de lokale mensen betaalt Irak sinds de jaren '90 niet meer met de centen of Iraakse cent/fils.

Even een korte introductie over de huidige Iraakse Dinar = 1x Dinar wordt geschreven als 1x 1000 Dinar op het biljet en dus bestaat uit 4x 250.000 ;-). Een snoepje kan bijv 1000.250 kosten. Dus die laatste 250.000 kun je als cent zien, maar eigenlijk is het niet.

En dus om het systeem voor hen makkelijk te maken, wilde ik daarom dat er geen nullen verschijnen na het tweede decimale punt, omdat men reeds werkt met duizenden en miljoenen. Eigenlijk heel verwarrend dus allemaal. Maar goed het werkt en daar ben ik heel blij mee ;-)
 
Ben van Velzen

Ben van Velzen

04/10/2017 17:02:56
Quote Anchor link
Dan moet je daar toch eens naar kijken, want dit is een tabel uit 2015. Het is ook niet logisch, om de reden die Ward al schetst. Hoe ga jij nu bepalen of 2.000 2000 is of 2? Hoe weet je dat 2.000.000 2000000 is of 2000? Farsi heeft een afwijking, namelijk getallen als 1.2345/67, maar dat is een uitzondering, en is nog steeds wel duidelijk.
Gewijzigd op 04/10/2017 17:03:57 door Ben van Velzen
 
Mohamed nvt

Mohamed nvt

04/10/2017 19:49:07
Quote Anchor link
Daar heb je wel een punt natuurlijk en daarom heb ik nu een komma gezet voor de centen zeg maar.
Dus om een getal duidelijk te maken, wordt het als volgt weergegeven: 20.000,500 weergegeven.
Ik ben nog aan het uitzoeken, want het zou ook mogelijk kunnen zijn dat ik de punt en komma van plaats moet wisselen.
Wordt nog vervolgd...
 
Ward van der Put
Moderator

Ward van der Put

05/10/2017 07:30:12
Quote Anchor link
Raad eens wat de derde parameter $dec_point en de vierde parameter $thousands_sep van number_format() doen?

string number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," )

Iemand nog koffie?

Afbeelding
 
Mohamed nvt

Mohamed nvt

05/10/2017 08:54:26
Quote Anchor link
Ben van Velzen op 04/10/2017 15:22:21:
En de relevantie daarvan is, wat precies?

Voor de grap even wat Arabische formattering erbij gepakt. Mohammed, let op:

Arabic - Saudi Arabia 1,234.56
Arabic - Iraq 1,234.56
Arabic - Egypt 1,234.560
Arabic - Algeria 1,234.56

Hallo Ben,

Ik heb nog eens nagevraagd en zelf gekeken naar hoe het Iraakse valuta systeem wordt gebruikt, dus hoe punten en/of komma's worden gebruikt en het blijkt dat je gewoon gelijk hebt :D.
Ik heb een voorbeeld loonstrookje ontvangen en daarin wordt vermeld 1,700,000.00. En dus zoals je ziet, wordt er komma's gebruikt, zoals je had aangegeven en er zijn twee nullen, maar sinds er niet met centen wordt gewerkt, hoeven die nullen ook niet weergegeven te worden.
M.a.w. je hebt helemaal gelijk kerel en sorry voor al die moeite....

Momenteel gebruik ik de volgende code en het doet precies wat ik doe:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo number_format($row['purchaseprice']);




Lekker simpel en overzichtelijk :-)
Gewijzigd op 05/10/2017 08:56:15 door Mohamed nvt
 
Ben van Velzen

Ben van Velzen

05/10/2017 11:15:15
Quote Anchor link
Ward, goh? Er was volgens mij helemaal geen twijfel over wat number_format met zijn parameters doet. Van mijn kant in ieder geval niet.
 

Pagina: « vorige 1 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.