06. marts 2013 - 15:59Der er
8 kommentarer og 1 løsning
Hjælp til speciel afrunding
Hej,
Jeg har en problematik som jeg skal indføre i et program. Det består af en afrundingsfaktor som skal influere på et tal.
Eksempler:
- Hvis jeg har 112 og min afrundingsfaktor er 9 ender vi på 109
- Hvis jeg har 247 og min afrundingsfaktor er 0 ender vi på 250
- Hvis jeg har 146 og min afrundingsfaktor er 8 ender vi på 148
- Hvis jeg har 131 og min afrundingsfaktor er 7 ender vi på 127
Så det handler om, hvorledes afrundingsfaktoren får grundtallet til at blive i egen 10'er-række eller hoppe ned i forrige/op i næste, alt efter hvad der ligger tættest.
Man kan jo godt ved at kigge op tallet og afrundingsfaktoren se hvor vi ender, men hvordan kan jeg stille dette op logisk, så jeg kan omsætte det til programmeringssprog.
Ok, svar #2 er ikke rigtigt. Ved at heltalsdividere med 10 og gange med 10, runder man jo altid ned. Der skal bruges "almindelig afrunding" for at det virker
public int afrund(int x, int a) { if (x < a) { return a; }
@Arne, jeg har prøvet at køre din løsning gennem en funktion, og hvis jeg kører dem gennem mine fire eksempler får jeg resultaterne af tal1, tal2, tal3:
- Hvis jeg har 112 og min afrundingsfaktor er 9: 121, 111, 131
- Hvis jeg har 247 og min afrundingsfaktor er 0: 247, 237, 257
- Hvis jeg har 146 og min afrundingsfaktor er 8: 154, 144, 164
- Hvis jeg har 131 og min afrundingsfaktor er 7: 138, 128, 148
Den er på vej, men jeg kan ikke helt se hvor den går galt.
@alphabits, jeg prøver at konvertere dit sidste forslag til noget VB'sk, men mit resultat bliver altid det samme som grundtallet hvis jeg bruger:
Public Function afrund(x As Integer, a As Integer) As Integer If (x < a) Then Return a Else Return Math.Round((x-a) / 10) * 10 + a End If End Function
- Men jeg er ikke sikker på om den er korrekt oversat??
Jeg har aldrig programmeret i VB, men umiddelbart ser det ud til at du har oversat det korrekt. Men måske kalder du funktionen med forkerte parametrer. Prøv at give nogle eksempler på hvordan du kalder funktionen. Til gengæld har jeg fundet en lille fejl i min kode, så du får lige en opdateret version.
public int afrund(int x, int a) { if (x < a) { return a; } double rounded = Math.Round((x-a) / 10.0) * 10; return (int)(rounded + a); }
Hvis jeg f.eks. kalder afrund(120, 8) får jeg 118. Hvis jeg kalder afrund(120, 4) får jeg 124 osv.
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.