Omdat het vorige topic over alles ging behalve de gestelde vraag, wil ik nu dezelfde vraag opnieuw stellen met meer informatie.
Om bovenstaand bedrag op te slaan, heb ik de type van betreffende kolom veranderd in float. En, om dit bedrag weer te geven in PHP gebruik ik nu de functie number_format().
Wanneer ik het zonder punten invul, dan krijg ik volgend resultaat:
1700250.000000
Het lijkt dus goed te gaan, maar nu krijg ik 6 nullen achter de punt.
Moet ik me zorgen om hier maken?
Hoef ik nu alleen maar goed weer te geven in PHP of moet ik het eerst in MySql doen met de functie format?
En als ik berekening wil doen met dit bedrag, betekent dat ik wat moet doen met het origineel bedrag of met het geformatteerde bedrag?
Hopelijk is mijn vraag duidelijk.
Jah daar heb je wel gelijk in ;-)
Ik merk ook nu dat wanneer ik bijv 1700500 invul, dus zonder punten, dan wordt het weergeven als 100.700.500.000.
Zoals je ziet, is het dus bijna goed ;-)
Die laatste 3 nullen wil ik weg hebben, want anders klopt het bedrag niet.
En, ik gebruik number_format met de volgende specs
Mijn vraag is dus nu:
moet ik die extra 3 nullen weghalen:
1. Voordat het bedrag wordt opgeslagen in DB
2. Of nadat het bedrag opgeslagen is in de DB en dus met number_format functie achteraf?
Ik krijg het idee dat je de boel hier loopt te trollen, maar nog even een samenvatting:
UPDATE `DB2681116`.`medicines` SET `purchaseprice` = '1700.25' WHERE `medicines`.`id` = 130;
Hiermee zet je een prijs van 1700 Dinar en 25 Dinarcent (?) in de database (in een veld DECIMAL(15,4)). En let op: dus geen "leestekens" toevoegen tussen de duizendtallen, dat snapt een *database* niet; enkel een punt tussen de hele Dinars en de centen). In de database is dit gewoon een getal, dus die weet niet dat het om Dinars gaat, dat moet jij zelf onthouden. Als je de prijs in Dollars wilt tonen zul je 'm dus eerst om moeten rekenen (met een koers die je in een andere tabel opslaat - zie antwoord Ward). Als de prijzen over het algemeen in Dollars gaan zou ik dat als basis eenheid gebruiken, en omrekenen naar Dinars als daar om wordt gevraagd.
number_format($row['purchaseprice'], 3, ',','.')
Hiermee toon je een getal op de manier zoals de *gebruiker* het graag ziet. Dit is de Nederlandse manier, met een komma tussen de hele getallen en de decimalen (centen), en een punt om de duizendtallen beter te kunnen onderscheiden (het bedrag hierboven wordt dan dus getoond als "1.700,25"). Nou begrijp ik dat Irakezen/Koerden voor beiden een punt gebruiken, maar dat geeft dus wel de verwarrende situaties die je hierboven zelf al aangeeft als je drie cijfers "achter de komma" toont. Misschien zou je dus zoiets kunnen doen:
Geen idee of dat duidelijker is, het geeft in ieder geval minder kans op verwarring.
Samenvatting:
- In de database sla je getallen dus altijd op zonder "opmaak", met een punt als decimaal scheider ("voor de centen"), en verder niks.
- Op het scherm kunt je het net zo mooi maken als je wilt, maar moet je er dus wel rekening mee houden dat de gebruiker het blijft snappen.
Voor je laatste vraag
rtrim(number_format(...),'0')
Hiermee haal je de achterste nullen van je bedrag af. Bij "1.700.000" hou je dan "1.700." over. Met die punt op het eind zul je nog iets moeten. Ik zou 'm niet weg halen, anders wordt het weer verwarrend (is het nu 1700, of 1.7?). Dus misschien kun je iets doen als:
Je moet bedragen met maar één punt gebruiken. Die punt heeft de functie van onze komma: voor de punt staan euro's, achter de punt volgen de centen.
In de weergave, oftewel een view, kun je daarvan afwijken met allerlei andere punten, komma's en valutasymbolen. Zolang je maar rekent met getallen met slechts die ene punt.
Aangezien je bedragen in verschillende vulata wilt opslaan, moet je weten of 1700.00 nu dollars of dinars zijn. Dat sla je dus bij elk bedrag op
Als je streng normaliseert, gebruik je daarbij een aparte tabel voor de valuta. Daarin leg je bijvoorbeeld vast wat het juiste valutasymbool of de valuta-afkorting is. En daarin kun je ook vastleggen dat je dollars noteert met twee decimalen, maar dinars met drie decimalen.
Hallo Ward,
Volgens mij heb je je bericht bewerkt, nadat je had al had gereageerd, want ik zie nu pas je laatste wijziging en ik snap nu meer wat je bedoelt. Bedankt iig ;-)
[size=xsmall]Toevoeging op 01/10/2017 14:27:06:[/size]
Hallo Rob,
Geen idee hoe je erbij komt dat ik de boel hier probeer te trollen, want dat is niet mijn intentie en ook nooit geweest hoor.
Ik post hier een bericht, omdat ik een probleem heb en wil graag de feedback van anderen erover horen.
Over geen verwarring te veroorzaken; ik wil graag nogmaals aangeven dat ik zal werken met Dinars en met Dollars, maar absoluut geen Euro's. Dat gezegd te hebben.
Overigens, het is me nu duidelijk dat ik een punt moet gebruiken tussen de gehele getallen en centen. Dus zowel voor Dinars als voor Dollars. Mocht ik dit punt verkeerd hebben, begrepen,dan hoor ik dat graag. ;-)
En het 'probleem' waar ik nu tegen aanloop of eigenlijk geen probleem, want het ligt aan het bedrag:
Wanneer ik 20000 invoer, dan verschijnt het op de website 20.000.000. Dus zoals je ziet, die 3 nullen aan het einde zijn niet nodig, omdat het bedrag 20.000 oftewel twintigduizend is en geen twintig miljoen
Maar wanneer ik 2000.750 invul, dus twintigduizend + 750 cent, dan wordt het weergegeven als 20.000.750, dus twintigduizend + 750 cent. En, dit bedrag klopt wel.
Het lijkt erop dat ik die extra 3 nullen moet verwijderen, wanneer er geen getal achter de punt komt en moet laten staan er wel een getal komt achter de punt. Klopt mijn gedachte hier?
En volgens mij moet ik dit bepalen, voordat het bedrag in de DB opgeslagen worden?
Daar heb je wel gelijk in, maar aanvankelijk wilde ik weten of ik op het juiste pad was met number_format en daarom had ik nog niet veel over gezocht. Iig bedankt.
En zoals ik boven aangaf, afhankelijk van het bedrag wil ik soms de getallen achter de nul hebben en soms helemaal geen getallen achter de nul.
Moet ik dit soms aanpakken met een if statement of is er een betere/makkelijkere manier om te controleren of er getallen zijn achter de punt?
Lay-out technisch zou ik er in dat geval voor kiezen om gewoon altijd 2 getallen achter de komma te zetten. Als je xxx,00 lelijk vindt, dan kun je met [php]str_replace[/php] ',00' vervangen door '' of door ',-'.