Avatar billede jesperbaldur Nybegynder
20. november 2002 - 17:49 Der er 8 kommentarer og
2 løsninger

Afrunding af 0.00000122244 til 2 betydningsfulde decimaler

Hvis man har et tal fx 2,222114 eller 0,000000002114587  hvordan kan man så sikrer sig at VB altid viser tallet med 2 betydningsfulde cifre. Dvs at 0,000000002164587 =0,0000000022 og 2,222114 = 2,22
Avatar billede lord-klaus Nybegynder
20. november 2002 - 17:53 #1
i det tilfælde er det 0,000001 er det to du skal kig efter---- alså 0,0000012
Avatar billede martin_moth Mester
20. november 2002 - 19:29 #2
En fusker-løsning er at gemme tallet som streng, læse cifrene efter kommaet et for et - så snart der stødes på et ciffer, der ikke er nul, tages det samt det næste med, resten trunkeres:

  Dim i As Integer
  Dim strTal As String
  Dim strNytTal As String
 
  strTal = 10.0100123456
  For i = InStr(strTal, ".") + 1 To Len(strTal)
    If Not Mid(strTal, i, 1) = "0" Then Exit For
  Next i
  strNytTal = Mid(strTal, 1, i + 1)
  MsgBox strTal & " afrundes til " & strNytTal

Ovenstående afrunder strTal til strNytTal - prøv selv med copy-paste

Jeg bruger punktum som decimal-komma, så måska skal du rette lidt i det, hvis du ikke gør.

lord-klaus' bemærkning forstår jeg ikke?
Avatar billede martin_moth Mester
20. november 2002 - 19:31 #3
Hmmm - min løsning oprunder jo ikke - det kan dog klares ved at tage nogle flere decimaler med, afrunde, og først derefter trunkere. Men det er som sagt en fuskerløsning, og sikkert ikke det du er ude efter. Håber en anden kan fortælle os om en standard funktion i VB, der kan det du eftersøger - ellers må du i gang med at skrive en selv ;o)
Avatar billede kabbak Professor
20. november 2002 - 19:56 #4
Public Sub Afrund_Til_To_Betydende()
Dim C As Variant, A As Variant, B As Integer, E As Variant, D As Variant _
, F As Integer, G As Integer, N As String

A = CDec(2.00000000214459)
If Int(A) > 0 Then
C = A - Int(A) ' decimalværdien
End If
D = CDec(C)
B = Len(D) - 2 ' antal tegn efter kommaet
E = CDbl(Val(Right(D, B))) ' værden efter kommaet som hetal(double)
G = Len(E) 'Antal tegn med værdi efter kommaet
E = CInt(Val(Mid(E, 1, 2) & "." & Right(E, G - 2)))
F = B - G ' finder antal nuller efter kommaet
N = Mid(C, 2, F + 1) ' streng med nuller
'E = Int((E * 100) / 100000) ' afrunder til to betydende
Værdi = Int(A) & N & E
Debug.Print Værdi

End Sub
Avatar billede kabbak Professor
20. november 2002 - 19:57 #5
slet denne linie
'E = Int((E * 100) / 100000) ' afrunder til to betydende
Avatar billede jesperbaldur Nybegynder
20. november 2002 - 20:13 #6
ok det ser ud til at virke nogenlunde...Men.... tallet 2.00000000214459 skrevet med 2 betydende cifre er 2.00, mens 0.0000000125 skrevet med 2 betydende cifre er 0.000000013  og 2.1246322 er 2.12
Avatar billede kabbak Professor
20. november 2002 - 21:55 #7
Skulle den ikke også runde op og ned efter værdien efter de to første ?.

Ret lige programmet til dette, det er hvis værdien er under 1.

If Int(A) > 0 Then
C = A - Int(A) ' decimalværdien
Else
C = A
End If
Avatar billede ocp Nybegynder
21. november 2002 - 08:30 #8
msgbox(Format(0.0000000125, "0.0E+"))
Avatar billede ocp Nybegynder
21. november 2002 - 08:32 #9
Eller, hvis det skal ud på "u-videnskabelig" måde:
msgbox(CDbl(Format(0.00320000125, "0.0E+")))
Avatar billede jesperbaldur Nybegynder
21. november 2002 - 09:16 #10
ok, det virker -->ocp. Tak for hjælpen...også til kabbak
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
Kurser inden for grundlæggende programmering

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