Avatar billede medusa Nybegynder
29. november 2001 - 16:16 Der er 1 kommentar og
2 løsninger

Afrund funktion

Vi benytter nedenstående funktion til at afrunde et tal med valgfrit antal decimaler.

Function DSStdAfrund (tal As Double, antdec As Integer) As Double
    Dim strtal As String   
    Dim strheltal As String, nystrheltal As String
    Dim strdec, nystrdec As String
    Dim nystrtal As String   
       
    If tal = 0 Then
        DSStdAfrund = 0
        Exit Function
    End If
    strtal = Cstr(tal)
    strheltal = Cstr(Fix(tal))
    nystrheltal = strheltal 
   
    Dim formatstreng As String
    Dim i As Integer
    For i = 1 To Len(strheltal)
        formatstreng = formatstreng + \"#\"
    Next
    formatstreng = formatstreng + \".\"
    For i = 1 To antdec
        formatstreng = formatstreng + \"#\"
    Next
    DSStdAfrund = Cdbl(Ccur(Format(tal, formatstreng)))
End Function

Problemet opstår hvis man har et tal som er under 0, dvs eks: 0,009943. Den burde jo bare afrunde det til 0 (hvis antallet af decimaler er 0) men man får \"Type Mismach\". Er der nogen som har en god forklaring, og evt forslag til forbedring??
Avatar billede cdelicht Nybegynder
29. november 2001 - 20:00 #1
To ting:
1) du forudsætter i koden at decimal skilletegnet er \".\", men i dit eksempel angiver du \",\" (komma). Hvis din server kører med \",\" som skilletegn såe....
2) \"If tal = 0 Then\" kunne med fordel ændres til \"If (tal < 1) And (tal > -1) Then\" - så får du altid 0 (nul) her.
Avatar billede jespernaur Nybegynder
29. november 2001 - 20:01 #2
I stedet for at konvertere til string og tilbage igen, må du da kunne
bruge den indbyggede Round funktion. Uddrag af dokumentationen:

Round function
Rounds a number to a specified number of decimal places.
Syntax
Round ( numExpr , places )
Elements
numExpr
Any numeric expression. The number to be rounded.
places
Any numeric expression representing the desired number of decimal places. If
places is not an integer, it is converted to one.
Return value
Round returns a Double.
If the first non-significant digit is 5, and all subsequent digits are 0, the last significant
digit is rounded to the nearest even digit. See the example that follows.
If places is negative, the number is rounded to places digits to the left of the decimal
point. See the example that follows.

Examples: Round function
\' Round to one decimal place.
Print Round(4.23, 1) \' Prints 4.2
Print Round(4.35, 1) \' Prints 4.4
Print Round(4.45, 1) \' Prints 4.4
\' Round to the nearest hundred.
Print Round(153.33, -2) \' Prints 200

Mvh
Jesper Naur
Avatar billede medusa Nybegynder
30. november 2001 - 09:19 #3
Til cdelicht:
Ang. komma vs. punktum. Så har jeg prøvet at skrive 0.000987, men så bliver resultatet bare 987 og det er jo ikke ligefrem meningen.

En anden interessant ting jeg har opdaget er at den godt kan finde ud af et tal som 0,00598 (=0.01) men ikke 0,00123 eller 0,00059. ???
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