Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6 ja muuttuja ongelma

Sivun loppuun

Aku2 [08.10.2004 17:23:58]

#

Olen tehnyt ohjelman, joka muuttaa tietyn luvun päiviksi.
Nyt ongelmana on se, että jos tämä luku ylittää 20 päivän, niin luku on niin suuri, että käyttämäni muuttuja Long aiheuttaa sen, että kun käännän sen päiviksi, niin päivät ovatkin miinusmerkkisiä
Esim. Oikea luku laskettuna päiviksi osoittaa 28 päivää, kun oma ohjelmani näyttää sen -20 päivää.
Luku on tällöin n. 2419200 (sekuntteja)

Käytännössä luku voi kasvaa niin suureksi, että päiviksi muutettuna se voi ylittää yli 300 pävää, joten mitä muuttujaa tuossa pitäisi käyttää jotta se ei aiheuta tuota ongelmaa?

hunajavohveli [08.10.2004 17:48:02]

#

En aivan käsittänyt, mikä tässä oli ongelmana, mutta tarkoititko siis, että Longin lukualue on liian pieni? Että luvut, joita käytät ylittävät neljä miljardia? Kokeilepa käyttää Doublea, se on kaksi kertaa niin suuri kuin Long, mutten oikein usko, että se voisi ratkaista tämän ongelman.
Edit: Millä tavalla siis muutat tuon sekuntimäärän päiviksi, ja takaisin? Yksinkertaisesti kertomallako?

tuomas [08.10.2004 17:53:03]

#

Vika mahdollisesti muunnos koodissa? Laita koodi näkymään..

Blaze [08.10.2004 18:07:19]

#

Vika on kyllä jossain muualla, kuin tuossa tietotyypin valinnassa. Longin lukualue on ~-2*10^9 - 2*10^9 ja tuo 300 päivääkin on sekunteina "vain" ~26*10^6

hunajavohveli [08.10.2004 18:15:41]

#

Function Konversio(ByVal a As Double) As Double

a = a / 60  'minuuteiksi
a = a / 60  'tunneiksi
a = a / 24  'päiviksi
Konversio = a

End Function

Tekaisin tällaisen funktion, joka palauttaa parametrina saadut sekunnit päivinä. Itse en havainnut mitään ongelmaa muunnoksessa.

Aku2 [08.10.2004 23:31:07]

#

paivat = CLng(koa) \ 86400
   koa = CLng(koa) - paivat * 86400
   tunnit = CLng(koa) \ 3600
   koa = koa - tunnit * 3600
   minuutit = CLng(koa) \ 60
   koa = CLng(koa) - minuutit * 60
   sekunnit = koa

Ja tuo muuttuja koa on longina. Doublella ko systeemi ei edes toimi.
Sen verran pitää korjata, että alkujaan koa on millisekuntteina (en saa sitä muulla ulos) jonka jaan ennen tuota koodia tuhannella saaden sekunneiksi sen.

Laitoin muunnoksen koodiin, että hakiessaan millisekunteina muuttujaan, niin sitä ennen teen tuon jaon, jolloin "ilmeisesti" pääsin tuosta ongelmasta pois jos päivät ei ylitä yli 300 päivää.

Ongelma on periaatteessa siinä, että valmis funktio määrittää millisekunnit suoraan longiksi, jossa koodissa pitäisi tehdä tyyppimuutos. Doubleksi muuttaminen ei siis ilmeisesti onnistu, koska jos sitä käytän, niin koko ohjelma ei toimi. Ainoa oikeastaan millä se toimii on long. Varianttia en ole koittanut. String on taas liian "raskas" joka myös liian suurella luvulla aiheuttaa ongelmia.

Metabolix [09.10.2004 09:01:21]

#

Tuo kenoviiva on väärinpäin; jakomerkki on / eikä \
ja millisekunteja mahtuu etumerkittömään longiin 49,7 päivää tai etumerkilliseen 24,9 päivää

Blaze [09.10.2004 10:13:03]

#

Metabolix kirjoitti:

Tuo kenoviiva on väärinpäin; jakomerkki on / eikä \

VB:ssä toimii molemmat. / palauttaa floatin ja \ kokonaisluvun.

Aku2 [09.10.2004 13:15:31]

#

Metabolix kirjoitti:

ja millisekunteja mahtuu etumerkittömään longiin 49,7 päivää tai etumerkilliseen 24,9 päivää

Mitä tarkoitat tuolla etumerkillisellä ja etumerkittömällä?

Heikki [09.10.2004 13:18:45]

#

Etumerkillisen muuttujan arvoalue on:
-n - n

Etumerkittömän muuttujan arvoalue:
0 - 2n

hunajavohveli [09.10.2004 13:20:44]

#

Eli siis etumerkittömään muuttujaan ei saa negatiivisia lukuja.
Edit: Mutta siis, ei kai tuolla Basicissa juuri ole merkitystä?

Blaze [09.10.2004 13:22:22]

#

VB:ssä käsittääkseni ei noita etumerkittömiä tietotyyppejä ole.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta