Hallo allemaal,

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().

Concreet gebruik ik nu de volgende code:

<td>' . number_format($row['purchaseprice'], 3, '.','.') .'</td>

En de output is: 1.700, maar ik wil juist het volledig bedrag laten zien.

Iemand een idee?
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.
Waarom kijk je dan niet gewoon of het ongeformatteerde getal een geheel getal is? Dan hoef je ook geen gekke stringvergelijkingen te doen.
Jah dat is een goeie.
Ik ga ernaar kijken.
Tnx!

[size=xsmall]Toevoeging op 04/10/2017 13:27:01:[/size]

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.

$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, ',','.');
			
		} 
	?>
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:
<?php
$decimals = ctype_digit($row['purchaseprice']) ? 0 : 3;
echo number_format($row['purchaseprice'], $decimals, '.', '.'); // je wilde immers punten.
?>

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!

[size=xsmall]Toevoeging op 04/10/2017 13:55:56:[/size]

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.
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.
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
Probeer het eens zo, gebruik makend van type coercion in PHP:
<?php
$decimals = (double)$row['purchaseprice'] == (int)$row['purchaseprice'] ? 0 : 3;
echo number_format($row['purchaseprice'], $decimals, '.', '.'); // je wilde immers punten.
?>
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?

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.

Reageren