Avatar billede martin_moth Mester
13. februar 2003 - 22:59 Der er 15 kommentarer og
2 løsninger

Rund OP til nærmeste Integer

Hej igen
Jeg skal afrunde OP til nærmeste integer:
  i = math.sqrt(24) (i vil da blive 5,099)

Det skal afrundes til 6

Hvordan?

Vel noget i retning af

  i = math.round(math.sqrt(24)) - eller noget i den stil?

( Pisse irreterende ikke at have Visual Studio - så ville man få det hele foræret bare man skriver math efterfulgt  af . )
Avatar billede martin_moth Mester
13. februar 2003 - 23:00 #1
Hmm - den var vist kun 15 værd - skidt, jeg flotter mig og byder 30 ;o)
Avatar billede websafe Nybegynder
13. februar 2003 - 23:10 #2
...mit kendskab til .net kan vist afrundes til 0, men et trick til at runde op er:
rund af, som du normalt gør (ex. 6,75 bliver til 6) og sæt din variabel til at være variabel+1 - på den måde bliver 6,75 afrundet til 6, som der så lægges 1 til, og resultatet bliver 7. Voilá :)
Avatar billede a_eriksen Nybegynder
13. februar 2003 - 23:13 #3
Der skal lægges 0.5 til før det sættes lig integeren
Avatar billede martin_moth Mester
13. februar 2003 - 23:14 #4
Så er problemet bare med math.sqrt(24) der giver 6.
6 afrundes herefter til 6
6 ændres til 7

Det jeg ønsker er naturligvis
...
math.sqrt(23) = 4
math.sqrt(24) = 4
math.sqrt(25) = 5
math.sqrt(26) = 6
math.sqrt(27) = 6
...
Avatar billede websafe Nybegynder
13. februar 2003 - 23:14 #5
...Hvis du nu skal tjekke roden af 81 (eller et andet, hvor roden er en integer, ex. 9), så er det en god idé, at tjekke om 1 går op i tallet, for eller får du roden af 81 til at være 10 (rod af 81 er 9, 9+1=10).
Avatar billede martin_moth Mester
13. februar 2003 - 23:18 #6
Det er jo noget pladder

Først tjek om een går op i tallet
-kan klares med if math.round(math.qart(24)) Mod 1 = 0 then...
Hvis ikke, og lægges een til

Så meget kode for så lidt - der må da være en måde med det sprit-nye .NET, hvor man kan runde ned til nærmeste integer?
Avatar billede martin_moth Mester
13. februar 2003 - 23:19 #7
Sorry - runde OP ;o)
Avatar billede martin_moth Mester
13. februar 2003 - 23:22 #8
Det er vist min sengetid - for at fjerne den forvirring jeg sikkert har givet med mit eksempel:

Det jeg ønsker er at runde OP til nærmeste heltal. Er tallet et heltal i forvejen rundes ikke op:
...
math.sqrt(23) = 5
math.sqrt(24) = 5
math.sqrt(25) = 5
math.sqrt(26) = 6
math.sqrt(27) = 6
...

Kan man ikke gøre det i EEN arbejdsgang (math.RoundUP eller noget i den retning)
Avatar billede kabbak Professor
13. februar 2003 - 23:24 #9
Jeg kender ikke noget til asp.net, men i stedet for at lægge 1 til som Websafe siger, så er mit forslag lægge 0.99 til.
Avatar billede martin_moth Mester
13. februar 2003 - 23:24 #10
Tak for hjælpen - fandt en hel 3. løsning
Avatar billede websafe Nybegynder
13. februar 2003 - 23:27 #11
kabbak >> Hvorfor 0.99?

martin_moth >> Kan du ikke lige lægge den på exp - jeg vil gerne se din løsning, for jeg ved at mit forslag ikke er så optimalt, som det burde være, så jeg er åben overfor nye inputs :)
Avatar billede martin_moth Mester
14. februar 2003 - 00:01 #12
Min 3. løsning var, jeg ikke behøvede at runde op, og at jeg fandt ud af hele problematikken omkring afrundingen i øvrigt var unødvendig. Det var fordi jeg havde et loop:

Dim i as integer
For i = 1 to math.sqrt(EtEllerAndetTal)
  'lidt kode
Next i

Jeg forudså problemer med at den øvre grænse for loopet var et decimaltal - men den tager bare heltalsdelen.

Altså

  For i=1 to 4,999 kører med i = 1,2,3,4
  For i=1 to 5,111 kører med i = 1,2,3,4,5

Og det er det jeg ville, efter nærmere eftertanke. Ingen ide i at runde op (det, at jeg i første omgang ønskede at runde OP, kan kun forklares ved at beskrive den kode jeg har inde i loopet, og det orker jeg ikke)...
Avatar billede kabbak Professor
14. februar 2003 - 00:02 #13
Websafe > læg 0.99 inden du afrunder , så får du altid det næste heltal.
Avatar billede martin_moth Mester
14. februar 2003 - 00:17 #14
kabbak: Ikke hvis det tal du afrunder har værdien 5,000001 :0)
Avatar billede cbp Nybegynder
14. februar 2003 - 07:08 #15
Math.Ceiling(MyNumber) er den helt korrekte og sikre måde at runde op til nærmeste heltal.
Avatar billede simon.ulsnes Nybegynder
14. februar 2003 - 07:12 #16
martin_moth >> Du kan jo sådan set også bare kigge i .NET Framework SDK Documentation, der står alle klasserne under Class Library med tilhørende ditten og datten.

// Simon
Avatar billede martin_moth Mester
14. februar 2003 - 09:46 #17
cpb: Sådan - det var den jeg (oprindeligt) ledte efter. Mon ikke der er en tilsvarende math.floor(MyNumber)...

Jer andre i øvrigt - takker for hjælpen!
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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