29. november 2001 - 16:16Der 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??
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.
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
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. ???
Synes godt om
Ny brugerNybegynder
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.