Avatar billede moddi100 Seniormester
20. november 2008 - 18:33 Der er 9 kommentarer og
1 løsning

Indsætte decimaltal i database

Hej

Hvordan kan jeg gemme decimaltal i min mysql-database, på en sådan måde at jeg kan bruge de indbyggede funktioner som ORDER BY Tal DESC?

- Morten
Avatar billede arne_v Ekspert
20. november 2008 - 18:36 #1
Vaelg en kolonne type i MySQL som tager decimal tal og gem dem. Lige ud af landevejen.
Avatar billede moddi100 Seniormester
20. november 2008 - 18:45 #2
Er det kun mig der føler mig dum? Kunne pludselig ikke tænke klart... (Smid et svar)
Avatar billede arne_v Ekspert
20. november 2008 - 19:06 #3
svar
Avatar billede arne_v Ekspert
20. november 2008 - 19:10 #4
Husk at i dynamisk SQL skal decimal tal altid vaere paa engelsk med punktum som decimal.

Og til penge boer du bruge DECIMAL ikke FLOAT som kolonne type.
Avatar billede htx98i17 Professor
21. november 2008 - 19:05 #5
arne_v hvorfor DECIMAL og ikke FLOAT ?
Avatar billede arne_v Ekspert
21. november 2008 - 19:30 #6
FLOAT er god til videnskabelig brug (maal). DECIMAL er god til bogholderi (penge).

FLOAT kan nemlig have lidt unoejagtighed.

Om du har 18 km eller 17.999 km til arbejde er ligegyldigt. Men om der er 742.00
i kassen eller 741.99 i kassen er ikke ligegyldigt bogholderimaessigt (det er
ligegyldigt udfra en realoeknomisk betragting).
Avatar billede arne_v Ekspert
21. november 2008 - 19:32 #7
Se f.eks.:

mysql> CREATE TABLE fproblem (id INT PRIMARY KEY,x FLOAT(12,2));
Query OK, 0 rows affected (0.20 sec)

mysql>
mysql> INSERT INTO fproblem VALUES (1, 1000000000);
Query OK, 1 row affected (0.03 sec)

mysql>
mysql> SELECT x FROM fproblem WHERE id=1;
+---------------+
| x            |
+---------------+
| 1000000000.00 |
+---------------+
1 row in set (0.00 sec)

mysql>
mysql> UPDATE fproblem SET x=x+1000 WHERE id=1;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>
mysql> SELECT x FROM fproblem WHERE id=1;
+---------------+
| x            |
+---------------+
| 1000001024.00 |
+---------------+
1 row in set (0.00 sec)

mysql>
mysql> DROP TABLE fproblem;
Query OK, 0 rows affected (0.00 sec)
Avatar billede htx98i17 Professor
21. november 2008 - 19:33 #8
interessant.
Forstår dog ikke hvordan der kan være unøjagtighed. 1 øre er da for faen 1 øre :)
Avatar billede arne_v Ekspert
21. november 2008 - 19:41 #9
DECIMAL lagees som navnet antyder decimalt:

a*100 + b*10 + c*1 + d*0.1 + e*0.01

og oerer er ikke et problem.

FLOAT lagres paa en speciel binaer maade:

(a*1/2 + b*1/4 + c*1/8 + d*1/16 + e*1/32 + ...)*2^f

og det er ikke alle paene 1/10 og 1/100 som kan repreasenteres eksakt paa den maade.
Avatar billede htx98i17 Professor
21. november 2008 - 21:55 #10
vildt...

tak for udredningen
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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