1.700.00 opslaan en weergeven
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
Waarom kijk je dan niet gewoon of het ongeformatteerde getal een geheel getal is? Dan hoef je ook geen gekke stringvergelijkingen te doen.
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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, ',','.');
}
?>
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, ',','.');
}
?>
Doe eens zoiets:
Code (php)
1
2
3
4
2
3
4
<?php
$decimals = ctype_digit($row['purchaseprice']) ? 0 : 3;
echo number_format($row['purchaseprice'], $decimals, '.', '.'); // je wilde immers punten.
?>
$decimals = ctype_digit($row['purchaseprice']) ? 0 : 3;
echo number_format($row['purchaseprice'], $decimals, '.', '.'); // je wilde immers punten.
?>
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.
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
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
Code (php)
1
2
3
4
2
3
4
<?php
$decimals = (double)$row['purchaseprice'] == (int)$row['purchaseprice'] ? 0 : 3;
echo number_format($row['purchaseprice'], $decimals, '.', '.'); // je wilde immers punten.
?>
$decimals = (double)$row['purchaseprice'] == (int)$row['purchaseprice'] ? 0 : 3;
echo number_format($row['purchaseprice'], $decimals, '.', '.'); // je wilde immers punten.
?>
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
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.
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.
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
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 ;-)
Gewijzigd op 04/10/2017 17:03:57 door Ben van Velzen
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...
string number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," )
Iemand nog koffie?
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
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:
Lekker simpel en overzichtelijk :-)
Gewijzigd op 05/10/2017 08:56:15 door Mohamed nvt
Ward, goh? Er was volgens mij helemaal geen twijfel over wat number_format met zijn parameters doet. Van mijn kant in ieder geval niet.