Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MySQL] Ordenen van floats gaat fout

Pagina: 1
Acties:

  • MightyMauz
  • Registratie: Augustus 2001
  • Laatst online: 13-06-2024
Ik heb in een tabel prijzen als floats opgeslagen en nu wil ik een functie maken waarmee ik de prijzen gesorteerd op- of aflopend wil weergeven. Maar het lukt me niet om ze goed weer te geven, er zit ook geen logica in de uitkomst.
Dit is de uitkomst van de ascending sortering:
418.33
279
473.33
473.33
179
296.99

En dit is mijn commando wat ik gebruik:
SELECT prijs FROM tabel WHERE status='20' ORDER BY $ord $order_type
$ord = de variabele die gesorteerd moet worden
$order_type = asc/desc

Wat doe ik fout? Kolommen met integers heeft hij geen problemen mee, met hetzelfde commando.

Thinkpad X220 Tablet | Canon 600D + Canon EF-S 15-85mm f/3.5-5.6 IS USM


  • orf
  • Registratie: Augustus 2005
  • Laatst online: 00:51

orf

Wat is de sql die je gebruikt zonder PHP variabelen?

  • MightyMauz
  • Registratie: Augustus 2001
  • Laatst online: 13-06-2024
SELECT prijs FROM tabel WHERE status='20' ORDER BY prijs asc
bedoel je?

Thinkpad X220 Tablet | Canon 600D + Canon EF-S 15-85mm f/3.5-5.6 IS USM


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Wat is de definitie van die kolom?

{signature}


  • JortK
  • Registratie: Mei 2007
  • Laatst online: 26-09-2022
Kun je het veld niet casten als een int bij het sorteren?

Dan omzeil je misschien het probleem maar dan weet je zeker dat je er geen problemen mee krijgt :)

[ Voor 36% gewijzigd door JortK op 16-12-2007 19:13 ]


  • Wizzkid007
  • Registratie: April 2003
  • Laatst online: 01-11 23:36
SELECT floor(prijs) FROM tabel WHERE status='20' ORDER BY floor(prijs) asc

Ongeveer hetzelfde idee als JortK. Sorteren op decimaal gaat fout omdat er geen decimalen meer zijn, maar als er nu wel goed gesorteerd wordt kan het een gedrag van float zijn.

Je kunt eens proberen om de getallen altijd met 2 decimalen op te slaan?

Volgensmij slaat float namelijk een getal op en de positie van de komma. Bij het sorteren wordt dan mogelijk geen rekening gehouden met de plaats van de komma.

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:17

BCC

Als het om geld gaat wil je zowieso werken met ints (in centen oid) en niet in floats. Anders krijg je allemaal leuke afrond issues die je absoluut niet wil hebben als het om geld gaat.

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • Wizzkid007
  • Registratie: April 2003
  • Laatst online: 01-11 23:36
mooi dat je dat naar voren brengt BBC,

ik zit op het moment te stoeien met bijvoorbeeld een float(8,2) waar ik 874734.45 probeer in op te slaan, maar doodleuk met 874734.44 terug komt zetten.

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:17

BCC

Wizzkid007 schreef op zondag 16 december 2007 @ 19:54:
mooi dat je dat naar voren brengt BBC,

ik zit op het moment te stoeien met bijvoorbeeld een float(8,2) waar ik 874734.45 probeer in op te slaan, maar doodleuk met 874734.44 terug komt zetten.
BCC :) Ik zou zeggen lees je maar eens goed in: http://en.wikipedia.org/wiki/Floating_point . Floats zijn gewoon niet geschikt voor dit soort berekeningen (by design)

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • Wizzkid007
  • Registratie: April 2003
  • Laatst online: 01-11 23:36
Wikipedia pagina had ik inderdaad gevonden. Komt er op neer dat float een beetje lijkt op mp3, het comprimeerd het getal en details raken soms verloren. Ik heb nu een alternatief gevonden: decimal, bijvoorbeeld: decimal(8,2)

bij int had ik mijn code aan moeten passen, nu gelukkig niet :)

om niet offtopic te raken zou decimal ook de oplossing voor de topic-starter kunnen zijn ;)

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:17

BCC

Wizzkid007 schreef op zondag 16 december 2007 @ 20:52:
bij int had ik mijn code aan moeten passen, nu gelukkig niet :)
Als je code netjes was geweest, dan had dit maar op 1 plek in je model gemoeten :)

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Overigens is MySQL niet altijd bugvrij, dus het kan best zijn dat je met zo'n simpele query tegen een bug in MySQL aanloopt als de sortering niet klopt. Anderzijds zou het me niet verbazen als de vereenvoudigde query die je hier toont, niet degene is die je in de praktijk gebruikt. Met als gevolg dat jij een bug in je query hebt gemaakt, die wij nu niet zien?
Pagina: 1