[php/mysql] prijzen in database defineren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een klein probleempje. Ik ben bezig met een webshop. Ik heb eerst prijzen als double en float geprobeerd te laden, maar dan wordt 15.00 afgerond naar 15. Ik wil graag dat er .00 achter komt te staan. Dus heb ik het geprobeerd met een string. Dit werkte wel er komt dan wel 15.00 te staan, maar met het sorteren gaat het fout dan krijg je dit soort resultaten:

11.00
222.00
33.00
3555.00
444.00

Dus nu is mijn vraag. Weten jullie een manier om het goed op te slaan dus in de vorm 15.00 en dat ik kan sorteren op prijs?

Acties:
  • 0 Henk 'm!

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 16-08 21:48

TheLunatic

Ouwe boxen.

Gewoon lekker 15 er in zetten en in je PHP code er .00 achter knikkeren als dat nodig is? Kan volgens mij zelfs handig met de number_format() functie.

Mother, will they like this song?


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op donderdag 19 januari 2006 @ 22:08:
Dus nu is mijn vraag. Weten jullie een manier om het goed op te slaan dus in de vorm 15.00 en dat ik kan sorteren op prijs?
Als je getallen opslaat als string, alleen voor het nut dat je de opmaak goed krijgt dan moet er een lampje gaan branden dat je verkeerd bezig bent. In je database hoor je je namelijk niet bezig te houden met de opmaak, alleen maar met de opslag.
Je kan dan bij het inlezen de opmaak regelen, bijvoorbeeld in je PHP code, maar eventueel zou dit ook via je SQL query zijn, hoewel dit geen voorkeur heeft bij mij :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
TheLunatic schreef op donderdag 19 januari 2006 @ 22:12:
Gewoon lekker 15 er in zetten en in je PHP code er .00 achter knikkeren als dat nodig is? Kan volgens mij zelfs handig met de number_format() functie.
Ja oke, maar als er in de database 2.5 staat komt er dan 2.5.00 te staan en dat is ook niet echt de bedoeling.

Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

da's vrij eenvoudig op te lossen door bijv. de number_format functie te gebruiken en niet blind achter elke waarde .00 te hangen
Als je de getallen als strings wil behandelen kan je desnoods nog kunnen kijken of er een . in de string voorkomt: zo nee .00 erachter, zo ja niks; dit is echter vrij ranzig

Acties:
  • 0 Henk 'm!

  • Tsunami
  • Registratie: Juni 2002
  • Niet online
Of je leert gewoon om float te gebruiken? Je kan met float gewoon cijfers achter de komma hebben...

Acties:
  • 0 Henk 'm!

  • WPN
  • Registratie: Augustus 2003
  • Laatst online: 24-07 21:14

WPN

ook al naar round gekeken?

@tsunami: no offense maar lees de TS nog eens :)
Ik heb eerst prijzen als double en float geprobeerd te laden, maar dan wordt 15.00 afgerond naar 15.
@TS: als je 15 opslaat in de DB kan je toch zelf bepalen of er later alsnog .00 achter komt te staan, hetzij met de genoemde functie of door te kijken of er een . in de prijs zit, als dat zo is dan kan je er .00 achterzetten

[ Voor 92% gewijzigd door WPN op 19-01-2006 22:55 ]

Als ik denk zoals ik dacht, dan doe ik zoals ik deed, als ik doe zoals ik deed, dan denk ik zoals ik dacht! Cogito Ergo Sum


Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Peluso schreef op donderdag 19 januari 2006 @ 22:52:
ook al naar round gekeken?

@tsunami: no offense maar lees de TS nog eens :)
printf("De prijs van artikel 1 is %.2f", $prijs) en weg is je representatie probleem, zonder gebruik te maken van allemaal aannames of hardcoded .= '.00' dingen. :)
Als je niet meteen wil printen, kijk dan naar de broertjes van printf.

[ Voor 16% gewijzigd door Voutloos op 19-01-2006 22:59 ]

{signature}


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Ik zou de boel gewoon in centen opslaan eerlijk gezegd. Dat voorkomt wat precisieproblemen mocht je willen gaan rekenen enzo. Daarnaast zou je kunnen kijken naar het DECIMAL datatype. Dan moet je wel opletten qua MySQL versie omdat de boel zich sinds versie 5 anders gedraagd :)

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Nu online
Idd. Prijzen moet je zowiezo niet in een float opslaan, maar in een decimal.
(Of in een integer veld natuurlijk, en dan als cent).

Om al maar helemaal over string te zwijgen, omwille van de redenen die Erkens al aangaf

[ Voor 28% gewijzigd door whoami op 20-01-2006 08:49 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

Ik sla alle waarden die geldbedragen representeren i.d.d. ook op als centwaarden, in sommige gevallen zelfs met (tien)duizendsten. Dit blijkt in de praktijk het makkelijkst te zijn, aangezien je dan alles kunt doen met je waarde wat je wilt.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
T-MOB schreef op vrijdag 20 januari 2006 @ 01:57:
Ik zou de boel gewoon in centen opslaan eerlijk gezegd. Dat voorkomt wat precisieproblemen mocht je willen gaan rekenen enzo. Daarnaast zou je kunnen kijken naar het DECIMAL datatype. Dan moet je wel opletten qua MySQL versie omdat de boel zich sinds versie 5 anders gedraagd :)
Ik eigenlijk ook, maar er werden hier een paar (imo) erg ranzige suggesties op het gebied van formatting gedaan, iets dat onder andere mooier kan met printf() en co.

{signature}


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Voutloos schreef op vrijdag 20 januari 2006 @ 10:40:
[...]

Ik eigenlijk ook, maar er werden hier een paar (imo) erg ranzige suggesties op het gebied van formatting gedaan, iets dat onder andere mooier kan met printf() en co.
number_format() is daarvoor bedoeld. Die zorgt ook direct voor . naar , conversie.

In nederland gebruiken we namelijk geen punten als decimaal scheidingsteken :)

[ Voor 10% gewijzigd door Bosmonster op 20-01-2006 11:25 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op donderdag 19 januari 2006 @ 22:21:
[...]


Ja oke, maar als er in de database 2.5 staat komt er dan 2.5.00 te staan en dat is ook niet echt de bedoeling.
Je controleert toch ook eerst of er niets achter de punt staat. Daarna ga je pas ,00 erachter zetten. En als er 1 getal achter staat, zet je er alleen een 0 achter. Eventueel de punt vervangen door een komma.

edit: ranzige code eruit

Maargoed, number_format is een betere oplossing dan hardcoded aanpassen.

PHP:
1
str_replace(",00", ",-", number_format($prijs, 2, ",", "."))

[ Voor 74% gewijzigd door Verwijderd op 23-01-2006 11:19 ]


Acties:
  • 0 Henk 'm!

Verwijderd

$prijs = sprintf("%01.2f", $prijs );

Acties:
  • 0 Henk 'm!

  • Tsunami
  • Registratie: Juni 2002
  • Niet online
Peluso schreef op donderdag 19 januari 2006 @ 22:52:
ook al naar round gekeken?

@tsunami: no offense maar lees de TS nog eens :)

[...]


@TS: als je 15 opslaat in de DB kan je toch zelf bepalen of er later alsnog .00 achter komt te staan, hetzij met de genoemde functie of door te kijken of er een . in de prijs zit, als dat zo is dan kan je er .00 achterzetten
Het kan aan mij liggen, maar ik heb een hele prijslijst in een database staan, met het type FLOAT(10,2), en dan staat er toch echt overal .00 achter...
Pagina: 1