Avatar billede keet Nybegynder
13. december 2004 - 13:34 Der er 14 kommentarer og
1 løsning

afrunding af tal

Jeg er ret ny til mssql, så derfor dette lille spørgsmål.
Jeg har brug for en funktion der kan afrunde korrekt.

F.eks:
1,45 => 1
1,64 => 2

Hvor kan jeg ellers finde dokumentation til mssql
Avatar billede keet Nybegynder
13. december 2004 - 13:42 #1
Jeg har f.eks. følgende: SELECT ROUND(seconds/60,0) AS minutes FROM ....
Avatar billede arne_v Ekspert
13. december 2004 - 13:50 #4
round, ceiling eller floor alt afhængig af hvad du vil
Avatar billede dsj Nybegynder
13. december 2004 - 13:52 #5
Følgende burde kunne gøre det:

SELECT ROUND(123.5, 0) AS minutes FROM ...

Hvilket giver resultatet: 124.0. Hvis du yderligere ønsker en integer returneret, kan du sige:

SELECT CAST(ROUND(123.5, 0) AS int) AS minutes FROM ...

Yderligere information om T-SQL på MS SQL Server finder du her: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ca-co_2y2h.asp
Avatar billede keet Nybegynder
13. december 2004 - 13:55 #6
Hvor vil dette ikke runde op til 2: SELECT    ROUND(100 / 60, 0) AS Expr1
Avatar billede dsj Nybegynder
13. december 2004 - 14:02 #7
Fordi der er tale om en division mellem to integers. Hvis du gør som nedenstående, afrundes til 2.0:

SELECT ROUND(CAST(100 AS float)/ 60, 0) AS Expr1
Avatar billede tjaz Nybegynder
13. december 2004 - 14:03 #8
Prøv:

<%
nummer = 1.45
nytnr = FormatNumber(nummer, 0)
'Her skulle så gerne udskrives 1
response.write nytnr
%>

og

<%
nummer = 1.64
nytnr = FormatNumber(nummer, 0)
'Her skulle så gerne udskrives 2
response.write nytnr
%>
Avatar billede arne_v Ekspert
13. december 2004 - 14:03 #9
prøv:

SELECT ROUND(seconds/60.0,0) AS minutes FROM ....
Avatar billede dsj Nybegynder
13. december 2004 - 14:05 #10
Ved division bliver resultat-værdien af samme type som den størst anvendte type i udtrykket, der i mit eksempel er '100', der cast'es til en float. Hvis to integers divideres, vil der aldrig komme cifre efter komma; resultatet vil de kun omfatte hvor mange gang y går op i x ved: x / y
Avatar billede keet Nybegynder
13. december 2004 - 14:08 #11
jeg brugte bare: SELECT ROUND(seconds/60.0,0) AS minutes FROM ....

Jeg ved ikke om du vil svare arne_v... :) eller så får DSJ point'ne for næste nemmeste svar :)
Avatar billede arne_v Ekspert
13. december 2004 - 14:11 #12
svar
Avatar billede keet Nybegynder
13. december 2004 - 14:13 #13
Ellers tak for hjælpen alle sammen...
Avatar billede tjaz Nybegynder
13. december 2004 - 14:13 #14
Kom lige i tanke om at du også kunne have brugt:

<%
nummer = 1.45
response.write CInt(nummer)
'Udskriver 1
%>

og

<%
nummer = 1.64
response.write CInt(nummer)
'Udskriver 2
%>

Hvilket er lidt nemmere :D
Avatar billede keet Nybegynder
13. december 2004 - 14:16 #15
jeg skulle godt nok ikke bruge det til asp.
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