[asp]Getal altijd afronden naar boven

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

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:07
Hoi,

Ben bezig met een klein scriptje om een aantal berekeningen uit te voeren.

1 daarvan is bijvoorbeeld het volgende:
ASP:
1
2
3
4
5
6
7
8
9
10
' converteren naar een integer
Aantal = Cint(request("aantal")
' deel door tien
BerekenAantal = Aantal \ 10
' hier kan dus een getal uitkomen, bijv. 2.4
' dit moet dus 3 worden.
BerekenAantal = Round(BerekenAantal)
' berekenaantal moet dus 3 zijn.
' m.a.w. altijd afronden naar boven!
response.write BerekenAantal&"<br>"


Mijn vraag is nu dus:
Hoe krijg je het voor elkaar in asp om altijd af te ronden naar boven.

Wat heb ik reeds al geprobeerd:
- Int, Fix, Mod, \, /, Cint (rond ook naar onder af), Rnd, Round
- MSDN doorgespit, maar helaas niks kunnen vinden

Ik weet dus niet welke er nog meer evt. te gebruiken zijn, en of het helemaal wel mogelijk is om af te ronden naar boven in asp. Dus of het wel zo simpel op te lossen is met een simpele functie.

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Y = Round(X + 0.49)

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:07
briljant :)
tja, je moet er maar ff opkomen :+

dit gaat altijd op?

[ Voor 18% gewijzigd door TeeDee op 03-01-2003 16:03 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

maar dat loopt helaas al mis bij 10.001. Als het niet anders kan zou ik iig
code:
1
Y = Int(X) +1
doen

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:07
Verwijderd schreef op 03 januari 2003 @ 16:02:
[...]
maar dat loopt helaas al mis bij 10.001. Als het niet anders kan zou ik iig
code:
1
Y = Int(X) +1
doen
Die waarde krijg ik er zowiezo nooit uit.

Het is namelijk altijd een veelvoud van iets. (in dit geval een veelvoud van 8 met een max van 112)

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Hmmpf ... da's weer zo ... :(

Zoiets dan?
Y = (Round(x + 0.5) = Round(x) ? Round(x) : Round(x + 0.5))

Edit:
Doet ? : het niet in VBScript en het klopt niet eens ... |:(

Probleem met de oplossing van Sikko2Go is met een rond getal, bijv. 9 wordt 10

Wat Liquid Silver zegt werkt als een zonnetje
/me is niet zo helder vandaag ....

[ Voor 57% gewijzigd door Verwijderd op 03-01-2003 16:37 ]


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 22:19

Klippy

Still Game

Of gewoon zoiets:

Y = Round(X)
if Y < X then
Y= Y+1

Of denk ik nu te simpel :P

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12 12:32
Y = Fix( ( x + ( x + 1 ) ) : 2 ) ;)

[ Voor 18% gewijzigd door Gert op 03-01-2003 16:51 ]


Verwijderd

Y = int (X) + 1 --> Dat moet altijd werken
Y = Round(X+.5) --> werkt ook altijd

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 10-12 10:22

_Thanatos_

Ja, en kaal

Bah mensen, allerlei If statements enzo...
Round(X + 0.5) rondt altijd af naar boven, Round(X - 0.5) rondt altijd af naar beneden.

Dan heb je nog Int(X), die rondt altijd naar beneden af (dus 99.8 wordt 99 en -99.8 wordt -100).

Tot slot heb je nog Fix(X), welke het decimale gedeelte afkapt en dus NIET altijd naar beneden afrondt, zoals Gert doet vermoeden. 99,8 wordt hierbij 99 en -99,8 wordt dan -99.

日本!🎌


Verwijderd

Verwijderd schreef op 03 January 2003 @ 16:53:
Y = int (X) + 1 --> Dat moet altijd werken
Nope ... voorbeeld: 9.0 moet 9 opleveren, maar wordt 10
Y = Round(X+.5) --> werkt ook altijd
Idem ...

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 10-12 10:22

_Thanatos_

Ja, en kaal

Hallo, als je 9.0 naar boven afrondt, dan wordt het toch 10 :?

[ Voor 2% gewijzigd door _Thanatos_ op 03-01-2003 17:02 . Reden: typo ]

日本!🎌


Verwijderd

Y=ROUND(X)+1*FPT(X)

In basic werkt dit :+

Thanatos: 9.0 wel (want = afronding) maar 9 dus nu net niet want 9 is al een beoogd getal.

[ Voor 52% gewijzigd door Verwijderd op 03-01-2003 17:03 ]


Verwijderd

_Thanatos_ schreef op 03 January 2003 @ 17:02:
Hallo, als je 9.0 naar boven afrondt, dan wordt het toch 10 :?
Uhm ... nee.

Edit:
/me lol
Okay, laten we even definieeren met wat bedoeld wordt met 'naar boven afronden'

Mijns inziens geldt namelijk dat voor alle getallen die onderdeel zijn van de verzameling natuurlijke getallen dat, naar boven afgerond, je op hetzelfde getal uitkomt. 9.0 is mijns inziens ook een natuurlijk getal.

[ Voor 47% gewijzigd door Verwijderd op 03-01-2003 17:09 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14:18

gorgi_19

Kruimeltjes zijn weer op :9

In het kader van: iedereen zet hier zijn functie neer.. :+

ASP:
1
2
3
4
5
6
function ceiling(byVal x) 
  if isNumeric(x) then 
    if x > int(x) then x = int(x) + 1
  end if
  ceiling=x
end function

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 10-12 10:22

_Thanatos_

Ja, en kaal

ok, dan werkt het dus alleen met getallen met decimale waarde :)

日本!🎌


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

gorgi_19 schreef op 03 januari 2003 @ 17:04:
In het kader van: iedereen zet hier zijn functie neer.. :+

ASP:
1
2
3
4
5
6
function ceiling(byVal x) 
  if isNumeric(x) then 
    if x > int(x) then x = int(x) + 1
  end if
  ceiling=x
end function
Deze vind ik persoonlijk het beste idee maar doe het dan wel zo
ASP:
1
2
3
4
5
6
7
8
function ceiling(byVal x, numdecimalplaces  ) 
dim  returnValue
  returnValue=round(x, numdecimalplaces)
  if returnValue < x then 
    returnVaule = returnValue + 1
  end if
  ceiling=returnValue
end function


offtopic:
Ik programeer geen asp... mocht het nog niet opgevallen zijn... :)

Programmer - an organism that turns coffee into software.


Verwijderd

Ach, als we gaan miereneuken ... laten we dan nog even een error raisen als de inputs niet van het juiste type zijn. ;)

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08 14:36
-int(-x)

| Toen / Nu


Verwijderd

sry had geen zin heel de topic te lezen maar:
dim getal
dim getal2
getal2 = round(getal)
If getal2 - getal1 < 0.5 Then
getal2 = round(getal+0.5)
End If


En als je dat goed bekijkt is het dus gewoon gelijk aan getal2 = round(getal+0.5) en is dit bericht overbodig want Mookai eeft et al gezegd:s
sry...

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 25-11 22:57

dusty

Celebrate Life!

Je kunt ook het Math object aanroepen. Kan je namelijk gewoon de functie math.ceil gebruiken (of de tegenhanger ervan afronden naar beneden met math.floor )

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
_Thanatos_ schreef op 03 January 2003 @ 16:58:
Round(X + 0.5) rondt altijd af naar boven, Round(X - 0.5) rondt altijd af naar beneden.
Dat zou je wel verwachten maar dit is dus helaas niet zo, probeer maar eens Round(5 + 0.5) en Round(6 + 0.5), beide leveren namelijk 6 op.
Bij Round worden getallen met .5 als decimaal deel afgerond naar het dichtsbijzijnde even getal, blijkbaar konden ze niet beslissen of ze halve waardes omhoog of omlaag moesten afronden en hebben ze besloten om het maar om en om te doen zodat je dan 50% kans hebt dat het goed gaat.

Voor positieve getallen zou dit toch ook moeten werken:
code:
1
X = int(X + 0.999999999...)
Met het aantal negens achter de komma kan je dan ook nog de significantie aangeven, bijv. als tienduizendsten niet belangrijk zijn moet je er 0.999 bij optellen.

  • TD-er
  • Registratie: Januari 2000
  • Laatst online: 23:23
ipv 0.999999... kun je beter iets schrijven als (1 - (1 / 1E100)) lijkt me een stuk makkelijker. (bestaat er in ASP een constante maxfloat, of minfloat ?)
Maar goed, doet het casten naar een int, niet hetzelfde als een round? Dan zou je dus met halfjes moeten werken en dan vind ik de eerder genoemde
- int (- x)
toch een stuk mooier.
Let er trouwens op dat een floor operatie vrij veel kost op een x86 CPU. Ik weet niet hoe vaak je dat moet toepassen, of hoe de implementatie is van de ASP-interpreter, maar het is allicht iets om rekening mee te houden.

Een goedkope voeding is als een lot in de loterij, je maakt kans op een paar tientjes korting, maar meestal betaal je de hoofdprijs. mijn posts (nodig wegens nieuwe layout)


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

Lister schreef op 04 January 2003 @ 03:48:
Voor positieve getallen zou dit toch ook moeten werken:
code:
1
X = int(X + 0.999999999...)
Met het aantal negens achter de komma kan je dan ook nog de significantie aangeven, bijv. als tienduizendsten niet belangrijk zijn moet je er 0.999 bij optellen.


waarmee wordt er gewerkt? Single of double precision?

bij single precision is de grootste waarde kleiner dan 1: (224 - 1) / 224 = 0.9999999403953552
hmm hoewel dit in decimale representatie waarschijnlijk weer verkeerd wordt afgerond... de bijbehorende float data in hexidecimale vorm is 0x3fffffffff

bij double precision is dat (254 - 1) / 254 = hmm mijn rekenmachine rondt het af naar 1 ;)
de bijbehorende double data in hexidecimale vorm is 0x3fffffffffffffff

maar aan de hexidecimale vormen zul je wel niets hebben aangezien asp/vb vast niet de mogelijkheden kent om die om te zetten naar werkbare getallen :P

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.


Verwijderd

was toch zoiets dat je het eerst maal 2 moest doen , afronden, en dan delen door
2 ?


Er was iig een truukje voor.

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 17-11 08:40

robjanssen

Software Developer

code:
1
Abs(Int(-BerekenAantal))
Pagina: 1