Avatar billede thomaxz Nybegynder
09. februar 2007 - 23:20 Der er 12 kommentarer og
1 løsning

total procent + antal filer = hvor langt enkelte filer er nået?

jeg har 2 tal, det samlede procenttal for alle filer i behandling, og hvor mange filer der er.

hvordan regnes det ud hvor langt den enkelte fil nået!
Avatar billede sjh Nybegynder
09. februar 2007 - 23:21 #1
Private Sub Form_Load()
Dim nMax As Long
Dim nValue As Long
Dim nProcent As Integer

  nMax = 128 ' Antal filer
  nValue = 64 ' Den fil du er nået til. (nummer)
  nProcent = Int(nValue / nMax * 100)

  Me.Caption = nProcent & "%"
End Sub
Avatar billede thomaxz Nybegynder
09. februar 2007 - 23:31 #2
eh?

jeg aner ikke hvilken fil jeg er nået til, mere eller mindre det jeg skal regne ud.

jeg ved den samlede total procent og hvor mange antal filer der skal behandles.


f.esk at der 2 filer så vil

25% svare til  50% af første fil
50% svare til 100% af første fil
75% svare til  50% af anden fil
100% svare til 100% af anden fil

men hvordan regner man det ud??
Avatar billede thomaxz Nybegynder
09. februar 2007 - 23:36 #3
og 12,5 % vil så svare til 25% af første fil.

antalet af filer er ikke den samme hvergang.
Avatar billede kjulius Novice
10. februar 2007 - 02:08 #4
Du går åbenbart ud fra, at alle filerne er lige store (det gør det jo også lidt nemmere :-)

Function BehandletPct(AktuelFilNummer As Integer, TotaltAntalFiler As Integer, AktuelFilLængde as Long, AktuelFilBehandletLængde As Long) As Single

  BehandletPct = ((AktuelFilNummer - 1) * AktuelFilLængde + AktuelFilBehandletLængde) * 100 / (TotaltAntalFiler * AktuelFilLængde)

End Function

Du kan naturligvis også sætte fillængden = 100 og angive behandlet længde til en procentandel, hvis du foretrækker det i stedet for den reelle fillængde.
Avatar billede thomaxz Nybegynder
10. februar 2007 - 10:28 #5
jeg aner ikke hvor alle de værider skal komme fra

jeg har 2 tal og KUN 2 tal, det samlede procenttal for alle filer i behandling, og hvor mange filer der er.

det smalde procental bliver hentede udefra, og og jge ved hvor mange filer den udefra behandlede process behandler, det jeg vil er at finde ud af hvor langt den er nået med den enkelte fil.

og trode også jeg havde køst den.

eproc=100/2=50

divfac=nået/eproc=25/50=0,5

proc=nået/divfac=25/0,5=50=50% :)



divfac=nået/eproc=75/50=1.5

proc=nået/divfac=75/1.5=50=50% :)



divfac=nået/eproc=12,5/50=0,25

proc=nået/eproc=12,5/0,25=50=50% :(

så den formel duede ikke.


-------------------------------------------

det jeg skal finde ud af er hvor langt den eksteren process er nået med hver enekel fil, jeg ved hvor mange filer den behandler og jeg for samlde bahndlig tilbage

så 50% af behandlingen vil ved 2 filer svare til 100% af første fil.
og 75% af behandlingen vil ved 2 filer savre til  50% af anden fil.
Avatar billede kjulius Novice
11. februar 2007 - 04:15 #6
Så må mit bedste gæt være:

Sub BeregnFilProcenter(AntalFiler As Integer, BehandletPct As Integer)
    Dim PctAfNuvFil As Integer
    Dim NuvFilNr As Integer
    NuvFilNr = Int(AntalFiler * BehandletPct / 100 + 0.999)
    PctAfNuvFil = (BehandletPct - ((NuvFilNr - 1) / AntalFiler * 100)) * AntalFiler
    MsgBox "Behandlet " & CStr(PctAfNuvFil) & "% af fil nr. " & CStr(NuvFilNr), vbInformation, "Behandlingsstatus"
End Sub
Avatar billede thomaxz Nybegynder
12. februar 2007 - 09:51 #7
>kjulius

det ser ud til at virke, tak.

men hvordan fungere det egenligt?
Avatar billede thomaxz Nybegynder
12. februar 2007 - 09:51 #8
jeg ved godt hvordan man kalder den, men jeg tænkte mere på selve formlen.
Avatar billede kjulius Novice
12. februar 2007 - 19:31 #9
Jeg har brugt denne "formel":

1) Nummeret på den fil der pt. behandles: Den opgivne procents andel af det samlede antal filer, oprundet til et helt tal.

Eks. Hvis der er 4 filer og der er behandlet 26%: 26% af 4 = 4 * 0,26 = 1,04 - oprundet til nærmeste hele tal bliver det 2

2) Den behandlede procentdel af fil 2:

Jeg finder ud af, hvor stor en procentdel af det samlede antal filer den allerede fuldt ud behandlede del udgør, dvs. hvis der er færdigbehandlet 1 fil, som i ovenstående tilfælde og det samlede antal filer stadig er 4, vil andelen af færdigbehandlede filer udgøre 1/4 = 1 * 100 / 4 % = 25%. Tilbage er altså 1%, som må være svaret.

Jeg håber det var mere forståeligt. :-)
Avatar billede kjulius Novice
12. februar 2007 - 19:40 #10
Lille korrektion...

... Tilbage er altså 1%, som dog skal ganges med det samlede antal filer, for den ene procent var jo oprindeligt fordelt over alle filer. Nu skal den repræsentere en andel af en enkelt fil, og bliver altså så meget desto større.

Jeg håber det var mere forståeligt. :-)
Avatar billede thomaxz Nybegynder
13. februar 2007 - 17:40 #11
kjulius> Tak, det hjapl lidt, men har også et c# program der gerne skulle bruge den samme men har knas med konveteringen.

ved ikke om du kan hjælpe, men lelr må jeg oprette et selvstændig spørgsmål?

jeg har prøvet dele formelne op fordi det ikke umidelvirke, og for nememre debuggin, men for satdgi mærklige resulter bla. ved 0.01 ved 4 filer.

    int BeregnFilProcenter(long AntalFiler,double BehandletPct)
        {
                double PctAfNuvFil;
                double PctAfNuvFilX1;
                double PctAfNuvFilX2;
                double PctAfNuvFilX3;
                double gangfac;
                double NuFilNr;
                int NuvFilNr;
           
                gangfac=BehandletPct/100;
                NuFilNr=System.Math.Ceiling((System.Convert.ToDouble(AntalFiler)*gangfac)+0.999);
           
                NuvFilNr=System.Convert.ToInt32(NuFilNr)-1;
                   
                PctAfNuvFilX1=(NuvFilNr/System.Convert.ToDouble(AntalFiler));
              PctAfNuvFilX2=PctAfNuvFilX1*100;
                PctAfNuvFilX3=BehandletPct-PctAfNuvFilX2;
                PctAfNuvFil=PctAfNuvFilX3*System.Convert.ToDouble(AntalFiler);
           
            return System.Convert.ToInt32(PctAfNuvFil);
        }


men det ser ud til at virke fint i visual basic


Function BeregnFilProcenter(AntalFiler As Integer, BehandletPct As Double) As Integer

    Dim PctAfNuvFil As Integer
    Dim gangfac As Double
   
    Dim NuvFilNr As Integer
    Dim NuFilNr As Integer
    Dim PctAfNuvFilX1 As Double
    Dim PctAfNuvFilX2 As Double
    Dim PctAfNuvFilX3 As Double
   
    If BehandletPct >= 99.5 Then
        BehandletPct = BehandletPct
    End If
   
    gangfac = BehandletPct / 100
    NuFilNr = Int((AntalFiler * gangfac) + 0.999)
    NuvFilNr = NuFilNr - 1
   
    PctAfNuvFilX1 = NuvFilNr / AntalFiler
    PctAfNuvFilX2 = PctAfNuvFilX1 * 100
    PctAfNuvFilX3 = BehandletPct - PctAfNuvFilX2
   
    PctAfNuvFil = PctAfNuvFilX3 * AntalFiler
   
    BeregnFilProcenter = CInt(PctAfNuvFil)
End Function


men måske jeg har overset noget.
Avatar billede kjulius Novice
13. februar 2007 - 19:58 #12
Umiddelbart lyser i hvert fald én ting i øjnene:

Du bruger Ceiling funktionen til at oprunde til nærmeste hele tal, og alligevel tillægger du 0.999 - det er en fejl, idet grunden til at jeg tillagde de nævnte 0.999 var, at VBA ikke har en Ceiling funktion, men ved at tillægge "næsten" 1, kan man bruge en INT funktion til at kappe overskydende decimaler af, og hermed opnå en Ceiling funktion.

Prøv at fjerne de +0.999 fra din C# kode.
Avatar billede thomaxz Nybegynder
14. februar 2007 - 08:57 #13
kjulius

Mange Mange tak.
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