[VB] Afronden naar boven

Pagina: 1
Acties:
  • 1.209 views sinds 30-01-2008
  • Reageer

  • phroze
  • Registratie: Augustus 2002
  • Laatst online: 17-08-2023

phroze

Malle Henkie

Topicstarter
Iemand die weet hoe je bijvoorbeeld 1.4 kunt afronden naar 2?
is hier nog een handige functie voor in vb?

XP1800/doet het niet :(


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
code:
1
variable = Abs(Int(-waarde))


typ voor de grap ook eens "ASP Rnd" in bij de zoekmachine :)

  • phroze
  • Registratie: Augustus 2002
  • Laatst online: 17-08-2023

phroze

Malle Henkie

Topicstarter
Dat had ik al geprobeerd, maar dan rond hij 1.4 af naar beneden (1). en het is juist de bedoeling dat hij alle getallen naar boven afrond :)

En met de Rnd functie precies hetzelfde. Ik dacht dat ik ergens in een boek gelezen had dat er een kleine functie voor in vb gebouwd zat. maar dat kan ik nu niet meer terugvinden :'(

XP1800/doet het niet :(


  • Paul
  • Registratie: September 2000
  • Laatst online: 20:53
1/2 erbij optellen en het integer-deel nemen?

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
rond ie dan 4 niet naar 5 af?

edit: is het niet mogelijk elk NIET heel getal + 1 te doen en dan de decimalen eraf te halen?

[ Voor 63% gewijzigd door Mischa_NL op 02-08-2004 19:36 ]


  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Math.Ceiling ?
of was dat alleen met .net :?

Blog [Stackoverflow] [LinkedIn]


  • phroze
  • Registratie: Augustus 2002
  • Laatst online: 17-08-2023

phroze

Malle Henkie

Topicstarter
Paul Nieuwkamp schreef op 02 augustus 2004 @ 19:32:
1/2 erbij optellen en het integer-deel nemen?
Kijk daar moet je ook maar opkomen :*)
Jeetje, binnen een minuut opgelost, dat gaat snel. Bedankt! _/-\o_

XP1800/doet het niet :(


  • phroze
  • Registratie: Augustus 2002
  • Laatst online: 17-08-2023

phroze

Malle Henkie

Topicstarter
Wolfboy schreef op 02 augustus 2004 @ 19:35:
Math.Ceiling ?
of was dat alleen met .net :?
Dat is dotNET :)
maar heb het al voor elkaar nu ;)

XP1800/doet het niet :(


  • Maasluip
  • Registratie: April 2002
  • Laatst online: 14-05 20:34

Maasluip

Kabbelend watertje

Fix(waarde)+1

[ Voor 3% gewijzigd door Maasluip op 02-08-2004 19:36 ]

Signatures zijn voor boomers.


  • Paul
  • Registratie: September 2000
  • Laatst online: 20:53
Hmm, dat is alleen om 0.5 en hoger naar 1 af te ronden bendek ik net :) 0.4 wordt dan gewoon 0

Jij wilt dus blijkbaar ALTIJD het integer-deel + 1? Integerdeel nemen en 1 erbij optellen :)

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Om er achter te komen dat 2 wordt afgerond naar 3. :(
code:
1
2
a: -sgn(x)*int(-sgn(x)*x)
b: -sgn(x)*int(-x)

a rondt 4,1 af op 5; -4,1 op -5
b rondt 4,1 af op 5; -4,1 op -4

[ Voor 34% gewijzigd door Lustucru op 02-08-2004 21:38 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Mayco
  • Registratie: Augustus 2002
  • Laatst online: 05-05 08:13
integerdeel plus een is niet helemaal correct, een 1 zal dan 2 worden, het moet dus groter zijn dan het integerdeel zelf.

zoiets dus:

if int(getal) != getal then
result = int(getal) +1
else
result = getal

[ Voor 29% gewijzigd door Mayco op 02-08-2004 21:37 ]


  • Rac-On
  • Registratie: November 2003
  • Niet online
het getal is X, dan doe je:

code:
1
2
3
4
5
if(integer(x) == x){
 x = x ;
else{
 x = integer(x) + 1;
}


Maar er is vast wel een functie die dit voor je doet. (ik kan nauwelijks vb dus het is pseudo-code, maar het gaat om het idee)

[ Voor 19% gewijzigd door Rac-On op 02-08-2004 21:38 ]

doet niet aan icons, usertitels of signatures


  • -DarkShadow-
  • Registratie: December 2001
  • Niet online
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
'-----------------------------------------------------
'Author: Dr. John A. Nyhart
'work  : john_nyhart@medicalogic.com
'home  : jnyhart@spessart.com
'web   : www.spessart.com/users/jnyhart/john1.htm
'Posted:7/22/97
'
'Here is a function to round a value up,down,or near 
'to another value.
'-----------------------------------------------------

Function doRound(value As Double, RStep As Double, Mode As String) As
Double
  ' ***********************
  ' Mode   function
  '  UP     RoundUp
  '  DN     RoundDN
  '  NE     Nearest
  '
  ' ***********************
  If Mode = "DN" Then
    doRound = (Int(value / RStep) * RStep)
    Exit Function
  End If
  
  ' **** mode up
  If Mode = "UP" Then
    If value Mod RStep > 0 Then
      doRound = ((Int(value / RStep) * RStep) + RStep)
    Else
      doRound = value
    End If
    Exit Function
  End If
  
  If Mode = "NE" Then
    value = value + (RStep / 2)
    doRound = (Int(value / RStep) * RStep)
    Exit Function
  End If
End Function

Zeker niet ideaal, maar een speciale functie schijnt er niet voor te zijn in visual basic 6. Als je heel vaak alleen naar boven moet afronden, dan zou ik er een speciale functie voor maken die alleen dat doet.
Heb het alvast voor je gedaan:
code:
1
2
3
4
5
6
7
Function RoundUp(ByVal val As Double)
        If Int(val) = val Then
            RoundUp = val
        Else
            RoundUp = Int(val) + 1
        End If
End Function

[ Voor 20% gewijzigd door -DarkShadow- op 02-08-2004 21:54 ]

Specialist in:
Soldeerstations
Oscilloscoop


  • Paul
  • Registratie: September 2000
  • Laatst online: 20:53
Afhankelijk van het aantal decimalen dat je maximaal hebt kun je er natuurlijk ook 0.9(999) bij optellen en dan het integerdeel nemen :)

Ik weet alleen niet wat duurder is, 0.9(999) ergens bij optellen of die if-jes die hierboven staan :)

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • phroze
  • Registratie: Augustus 2002
  • Laatst online: 17-08-2023

phroze

Malle Henkie

Topicstarter
-DarkShadow- schreef op 02 augustus 2004 @ 21:50:
Zeker niet ideaal, maar een speciale functie schijnt er niet voor te zijn in visual basic 6. Als je heel vaak alleen naar boven moet afronden, dan zou ik er een speciale functie voor maken die alleen dat doet.
Heb het alvast voor je gedaan:
code:
1
2
3
4
5
6
7
Function RoundUp(ByVal val As Double)
        If Int(val) = val Then
            RoundUp = val
        Else
            RoundUp = Int(val) + 1
        End If
End Function
Simpel en effectief, mijn dank is groot :)
Dat 0.5 erbij optellen bleek namelijk ook voor geen meter te werken :+

XP1800/doet het niet :(


  • Paul
  • Registratie: September 2000
  • Laatst online: 20:53
phroze schreef op 03 augustus 2004 @ 18:32:

Dat 0.5 erbij optellen bleek namelijk ook voor geen meter te werken :+
Afhankelijk van je definitie van afronden :) Ik had de vraag eerst verkeerd geinterpeteerd :P

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • Henk007
  • Registratie: December 2003
  • Laatst online: 06-04-2025
-DarkShadow- schreef op 02 augustus 2004 @ 21:50:
code:
1
2
Function RoundUp(ByVal val As Double)
        If Int(val) = val Then


Ik heb ooit geleerd dat deze vergelijking 'if integer=real then' gevaarlijk kan zijn en in bepaalde gevallen foutieve antwoorden kan geven. De implementatie die erboven staat is robuuster door het gebruik van de mod funktie. Je zou dat overigens vrij eenvoudig kunnen testen door als input een waardes te geven als bv. 4-10-12, 4, 4+10-12.
Okee dat was destijds wel in een mierenn* setting van wiskundigen die er altijd iets van maakten als
code:
1
if a-b<epsilon then

[ Voor 30% gewijzigd door Henk007 op 03-08-2004 19:57 ]


  • jan-marten
  • Registratie: September 2000
  • Laatst online: 13:55
Excuses voor de 'schop omhoog na een halfjaar' maar hier nog even mijn functies voor dit probleem. Op verschillende fora kwam ik de 'tel er 0.5 bij op' maar dit levert in sommige gevallen wat rare resultaten op.


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
' Functie   Floor
' Omschr.   Rond een gebroken getal af naar onderen
'           Floor( 1.6) = 1
'           Floor(-1.6) = -2
Public Function Floor(ByVal x As Double) As Long
    Floor = Sgn(x) * Abs(Int(x))
End Function

' Functie   Ceil
' Omschr    Rond af naar boven
Public Function Ceil(ByVal x As Double) As Long
    Ceil = Sgn(x) * Abs(Int(-x))
End Function


Ceil rond dus af naar +oneindig en Floor rond dus af naar -oneindig.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je floor is een beetje raar aangezien Int(x) al precies doet wat floor ook doet. De Abs en Sgn zijn dus overbodig.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Idem, maar nu met optioneel het aantal decimalen waarop je wil afronden (0 = hele getallen)
code:
1
2
3
4
5
6
7
Public Function Floor(ByVal x As Currency, Optional lDecimals As Long = 0) As Currency
    Floor = Int(x * (10 ^ lDecimals)) / 10 ^ lDecimals
End Function

Public Function Ceil(ByVal x As Currency, Optional lDecimals As Long = 0) As Currency
    Ceil = -Int(-x * (10 ^ lDecimals)) / 10 ^ lDecimals
End Function

:Y)
Overigens wel redelijk "gevaarlijk" als je met erg grote getallen werkt :P
Disclaimer: Uit de losse pols, niet gechecked ...

[ Voor 17% gewijzigd door RobIII op 25-01-2005 12:42 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • angelina
  • Registratie: Juli 2001
  • Laatst online: 27-04 22:04
Visual Basic:
1
iVal = -Int(-dblVal)

En sign proof (bv -2.1 en 2.1):
Visual Basic:
1
iVal = IIf(dblVal < 0, Int(dblVal), -Int(-dblVal))

[ Voor 62% gewijzigd door angelina op 25-01-2005 15:20 ]

Pagina: 1