Avatar billede lone_a_p Praktikant
26. november 2007 - 22:13 Der er 31 kommentarer og
1 løsning

Float eller decimal

Jeg er pludselig blevet i tvivl om, hvad jeg skal bruge, når jeg egentlig bare skal have skrevet decimaltal ind i en mysql-database.

f.eks. 1234.56

Hvad er forskellen lige helt præcis på float og decimal - eller skal jeg bruge noget helt tredje?
Avatar billede arne_v Ekspert
26. november 2007 - 22:21 #1
FLOAT for scientific data

DECIMAL for finansielle data
Avatar billede arne_v Ekspert
26. november 2007 - 22:24 #2
FLOAT daekker et meget stort range, men har til gengaeld en vis usikkerhed indbygget.

Du har 44.5 km til arbejde. Men du mener i virkeligeheden bare et sted mellem 44.45 og 44.55 - det giver ingen mening at sige at du har 44.5.000736 km til arbejde. FLOAT er
perfekt.

Er saldoen paa kontoen 23741.25, saa er saldoen praecis det. Den er ikke 23741.2500001.
Bogholdere og revisorer er lidt naertagne med hensyn til den slags.
Avatar billede lone_a_p Praktikant
26. november 2007 - 22:25 #3
Der er i øvrigt ikke altid 2 decimaler. Det er forskelligt - fra 0 til 3.
Avatar billede lone_a_p Praktikant
26. november 2007 - 22:27 #4
det er ikke finansielle data - det er vægtangivelser :)
Avatar billede arne_v Ekspert
26. november 2007 - 22:31 #5
Vaegt vil man nok typisk bruge FLOAT til. Der er nemlig en vis usikkerhed paa din vaegt.
Avatar billede lone_a_p Praktikant
26. november 2007 - 22:31 #6
det er bare som om det er et "loft"

jeg kan f.eks. taste 123456 ind i en float-dataværdi (eller hvad det hedder), men ikke 123456.1 ??

det har ikke været et problem indtil nu, for jeg har slet ikke haft brug for høje data ... men det får jeg nu her
Avatar billede arne_v Ekspert
26. november 2007 - 22:32 #7
Hvis den vise 1234.56 saa er der i virkeligheden 1234.559999 - 1234.560001 den mener.
Avatar billede lone_a_p Praktikant
26. november 2007 - 22:33 #8
men hvad mener du med usikkerhed?

hvis man skriver 45.45 er det så ik det tal, eller kan det pludselig være noget andet? - nok dumt spørgsmål, men jeg synes at den opfører sig lidt sjovt når jeg tester

og det er ikke altid i kilo eller gram - det er også i mikrogram, så den skal være ret nøjagtig ;)
Avatar billede arne_v Ekspert
26. november 2007 - 22:34 #9
Hvis du bruger DOUBLE fremfor FLOAT saa faar du hoejere praecision.
Avatar billede lone_a_p Praktikant
26. november 2007 - 22:34 #10
øh? okay, hvorfor pokker gør den det?

hvad nu, hvis jeg skal have den præcis?
Avatar billede arne_v Ekspert
26. november 2007 - 22:35 #11
En FLOAT har ca. 7 cifres praecision mens DOUBLE har ca. 15.

cifre - ikke decimaler !!
Avatar billede lone_a_p Praktikant
26. november 2007 - 22:35 #12
du er lige en anelse foran i skriveriet her :D

højere præcision ... men ikke helt præcis? hvad er usikkerheden eller unøjagtigheden så ved double?
Avatar billede arne_v Ekspert
26. november 2007 - 22:36 #13
Hvis du vil bruge DECIMAL og vil have 3 decimaler og 15 cifre ialt kan
du bruge DECIMAL(15,3).
Avatar billede lone_a_p Praktikant
26. november 2007 - 22:37 #14
igen ;)

ok, hvorfor regner den ikke bare med de nøjagtige tal?

hvad er ulempen så ved double frem for float?
Avatar billede arne_v Ekspert
26. november 2007 - 22:38 #15
Taenk paa decimal som et normal tal nnnnnnn.mmm hvor du angiver laengde.

Taenk paa float og double som scientific notation 0.nnnnnnEmm (der er ydeligere
den komplikation at float/double ikke bruger 1/10 1/100 etc. men 1/2 1/4 1/8 etc., men
lad os ignorere det).
Avatar billede arne_v Ekspert
26. november 2007 - 22:39 #16
en DOUBLE fylder dobbelt saa  meget som en FLOAT (gaet selv hvor navnet kommer fra)
Avatar billede arne_v Ekspert
26. november 2007 - 22:43 #17
en DOUBLE kan med 8 bytes daekke saa smaa tal som 2.2E-308 og saa store tal som 1.8E308

det ville kraeve en DECIMAL(616, 308) at goere det samme og den ville fylde rigtigt meget

FLOAT og DOUBLE giver meget stor range uden at fylde ret meget

til gengaeld er der lidt usikkerhed paa dem

men det goer normalt ikke noget ved maalinger

det er ikke ret tit at man kan maale en vaegt med 15 cifres noejagtighed (for en bil paa
1000 kg vil det svare til en milliardedel gram)
Avatar billede lone_a_p Praktikant
26. november 2007 - 22:43 #18
hm - 7 cifres præcision burde nu også være nok
Avatar billede lone_a_p Praktikant
26. november 2007 - 22:47 #19
men jeg skal ik skrive float(7,3) ??
Avatar billede lone_a_p Praktikant
26. november 2007 - 22:47 #20
jeg skal bare skrive float?
Avatar billede arne_v Ekspert
26. november 2007 - 22:48 #21
bare FLOAT

eller nok bedre bare DOUBLE
Avatar billede lone_a_p Praktikant
26. november 2007 - 22:50 #22
men du skriver at DOUBLE fylder dobbelt så meget? så er det vel bedst med FLOAT?
Avatar billede arne_v Ekspert
26. november 2007 - 22:52 #23
forskellen paa en million tal er 4 MB

harddiske er billige idag

jeg ville bruge DOUBLE
Avatar billede lone_a_p Praktikant
26. november 2007 - 22:57 #24
okay :)

så bare lige for at skære det helt ud - bare DOUBLE ... ik noget med DOUBLE(15,3) ??
Avatar billede lone_a_p Praktikant
26. november 2007 - 22:58 #25
og kan jeg bare sådan lige ændre fra float til double uden at der sker noget med de allerede eksisterende tal?
Avatar billede lone_a_p Praktikant
26. november 2007 - 23:04 #26
næ, det har jeg lige testet - værdierne ændrer sig (på decimalerne, der kommer pludselig rigtig mange)

skal jeg så lægge dataene over med php, eller hvordan gør man det?
Avatar billede arne_v Ekspert
26. november 2007 - 23:05 #27
ja bare DOUBLE
Avatar billede arne_v Ekspert
26. november 2007 - 23:06 #28
maaske er eksport det bedste
Avatar billede arne_v Ekspert
26. november 2007 - 23:06 #29
maaske er eksport og import det bedste
Avatar billede lone_a_p Praktikant
26. november 2007 - 23:10 #30
ah ja, tusind tak for hjælpen :)

smider du ik et svar :)
Avatar billede arne_v Ekspert
21. januar 2008 - 04:47 #31
Kommer her
Avatar billede lone_a_p Praktikant
21. januar 2008 - 08:36 #32
Tak ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester