PDA

Volledige versie bekijken : mysql_query --> 'groter' en 'kleiner dan' werken omgekeerd vanaf de duizendtallen?


+oMÁz_
%Europe/Berlin %676 %2007, 16:14
[hi folks]

iemand een idee wat er foutgaat bij het rekenen met getallen die bestaan uit duizendtallen?

ik gebruik momenteel deze regel:
$resultaat = mysql_query("SELECT naam FROM antwoorden WHERE antwoord5 > '999'") or die(mysql_error());

een getal dat kleiner is, wordt als kleiner uit de database gehaald, maar een getal dat groter is dan 999 wordt ook als kleiner uit de database gehaald.

In eerste instantie checkte ik op het getal 1162,52 (antwoord5 > '1162,52').
In dit specifieke voorbeeld blijkt het dan net omgekeerd te gaan.
50000 groter te zijn dan 1162,52
maar 62,52 blijkt ook groter te zijn.
vreemd, niet?

gebruik ik een klein getal, dan gaat alles prima
$resultaat = mysql_query("SELECT naam FROM antwoorden WHERE antwoord5 < '29,52'") or die(mysql_error());
50000 is groter, en 10 is kleiner.

Maar vanaf 999 gaat het fout (ik vermoed dat het dus fout gaat met het controleren van een getal groter of gelijk aan 1000)

Nu heb ik die hele hoop al binnenste buiten gedraaid, en nergens typo's te vinden.
Het werkt prima, tot ik het getal '1162,52' gebruik.
Vanaf dan gaat het fout.

Het gebruik van die komma ligt me enigzins dwars, maar aangezien het met kleine decimale getallen wél werkt, zit ik op dat spoor aan het einde van mijn latijn. Ook het verschil tussen een punt en een komma heb ik uitgeplozen --> still no game

't is misschien een lastig voorbeeld om van op afstand te analyseren, maar eender welke tip die me een eindje op weg helpt aangaande het rekenen in mysql met decimale getallen wordt ten zeerste geapprecieerd.

[/cheerioh_]

GBest
%Europe/Berlin %828 %2007, 19:52
heb je al geprobeerd punten met commas te verwisselen?

In Nederland: €25.999,99
in VS: $25,999.99

Volgens mij is dat je probleem ;) In de VS worden de commas gebruikt om duizndtallen aan te geven en . om decimalen aan te geven, en hier omgekeerd? Het is allicht makkelijk te testen

+oMÁz_
%Europe/Berlin %852 %2007, 20:27
oi GBest_

heb vanalles geprobeerd met die onnozele kommastuff.
de edge zit hem werkelijk wanneer het getal groter wordt dan 1000.
't is echt bizar_

kop noch staart

WernerL
%Europe/Berlin %863 %2007, 20:43
Haal die ' eens weg om 999. Nu denkt mysql dat het een string is.

+oMÁz_
%Europe/Berlin %868 %2007, 20:50
enorm plausibel_
net uitgeprobeerd, nu krijg ik een sql error (not a valid result)
maar misschien moet ik nu eerst weer wat gaan experimenteren met die komma's en punten.

hou je op de hoogte
bedankt alvast_

Bargok
%Europe/Berlin %440 %2007, 10:33
Duwtje:

'999' = string. Werkt geen numerieke vergelijking op.
999 = integer. Werkt numerieke vergelijking op.
99,44 = float. Werkt numerieke vergelijking op.
99.44 = double. Werkt numerieke vergelijking op.

Het is een goede richtlijn je velden aan te passen op de manier dat je nummers wilt vergelijken. Dus als je nummers een komma kunnen bevatten trek je daar 1 streep in en ontwerp je daar je database omheen (float in dit geval).

+oMÁz_
%Europe/Berlin %720 %2007, 17:18
oi Bargok_

die is goed. Moet ik onthouden voor de volgende keer.
Het zat hem inderdaad in de evaluatie als string, gekoppeld aan het gerommel met de punten en komma's.
Het was een vluggertje, en ik was er zonder veel nadenken in gevlogen.
Deed het vanacht met deze workaround:
getallen x 100 voor ze de database ingaan, en pas na alle berekeningen de resultaten op het juiste moment weer delen voor 100.
Beetje l*llig, maar het werkt.

iedereen erg bedankt_
[/cheerioh]