Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: hmm

Sivun loppuun

jhvisto [15.11.2003 08:35:56]

#

Miten saan Liukulukuja käyttöön, kun ohjelmani lasker seuraavasti: 10/2.89 =5.... eli se pyöristää luvut kuin ne olisivat kokonaislukuja, määrittelynä on ollut Double,Single,Integer,jne... mutta ongelmaan ei oo löytyny viel ratkaisuu....

setä [15.11.2003 10:31:43]

#

Kuis toi tarkkaan ottaen menee. Eli mikä on tuo 10 ja mikä tuo 2.89. Kyllä mun VB:ssä tulos on aina desimaaliluku ja vieläpä oikein.

Antti Laaksonen [15.11.2003 10:52:12]

#

Kyllä homman pitäisi onnistua, jos kaikki desimaaleja sisältävät muuttujat ovat Single- tai Double-tyyppisiä. Jos ei vieläkään toimi, niin näytäpä koodiasi.

thefox [16.11.2003 01:17:45]

#

Ihan vain näin knoppitietona QB:ssä (ja ilmeisesti myös VB:ssä) '/'-merkillä (vinoviiva? kauttaviiva?) suoritetaan liukuluku-jakolasku ja '\' (kenoviiva) kokonaisluku-jakolasku.

setä [16.11.2003 03:42:31]

#

Kenoviiva suorittaa jakolaskun kuten kauttaviiva, mutta jättää desimaalit pois. Siis A\B = INT(A/B).
VB:n mukaan 10/2.89 = 3.46020761245675 ja 10\2.89 = 3

jhvisto [16.11.2003 04:00:00]

#

eli tos olis koodiii, mutta sedän mainitsema / tai \ ei muuta laskentatulosta yhtään. 10:n ja 2,89 oli vain esimerkkejä

Private Sub laske1_Click()
Dim volt1 As Single
Dim Virta1 As Single
Dim ohmi1 As Single

volt1 = Val(Text4.Text)
Virta1 = Val(text5.Text)

ohmi1 = Val(volt1) \ Val(Virta1)
text6.Text = ohmi1

Antti Laaksonen [16.11.2003 11:05:45]

#

Ongelma liittynee pilkun merkintätapaan. Nimittäin:

Dim luku As String
luku = "2.13"
MsgBox Val(luku) '2,13

Kun taas:

Dim luku As String
luku = "2,13"
MsgBox Val(luku) '2

Eli ratkaisu on joko kirjoittaa amerikkalaiseen tyyliin pilkku pisteenä tai muuttaa mahdollinen pilkku pisteeksi koodissa esim. Replace-funktiolla:

Dim luku As String
luku = "2,13"
luku = Replace(luku, ",", ".")
MsgBox Val(luku) '2,13

thefox [16.11.2003 20:45:55]

#

lainaus:

Kenoviiva suorittaa jakolaskun kuten kauttaviiva, mutta jättää desimaalit pois. Siis A\B = INT(A/B).
VB:n mukaan 10/2.89 = 3.46020761245675 ja 10\2.89 = 3

Mjooh, mainittakoon vielä että tulisi aina käyttää ensisijaisesti kenoviiva-jakolaskua ellei desimaaleille ole tarvetta. Käytännössä VB ei vain "jätä pois" niitä desimaaleja kun käytetään kenoviivaa, vaan laskee laskun perus-aritmeettisilla käskyillä täten nopeuttaen ohjelmaa (kauttaviivalla käytetään aina fpu:ta -> hidasta).

setä [16.11.2003 21:45:07]

#

Ounastelinkin että virhe liittyy merkkijonon muunnokseen luvuksi. Val-funktio on hankala, koska jättää desimaalipilkun ja desimaalit huomiotta. Kannattaa käyttää funktiota csng("2,89"), joka muuntaa desimaaliluvun oikein. Jos on käytetty pistettä, seuraa virheilmoitus. Kannattaa huomata myös että Print Val("2.89") antaa tulosteeksi 2,89 (huomaa pilkku)

jhvisto [17.11.2003 03:46:30]

#

Kittän jälleen kerran kaikkia korvaamattomasta avusta. csng functio ratkaisi kaiken....

thefox [17.11.2003 14:39:21]

#

lainaus:

Ounastelinkin että virhe liittyy merkkijonon muunnokseen luvuksi. Val-funktio on hankala, koska jättää desimaalipilkun ja desimaalit huomiotta. Kannattaa käyttää funktiota csng("2,89"), joka muuntaa desimaaliluvun oikein. Jos on käytetty pistettä, seuraa virheilmoitus. Kannattaa huomata myös että Print Val("2.89") antaa tulosteeksi 2,89 (huomaa pilkku)

Melkein veikkaan että Print tosiaan tulostaa pilkun käyttäen Windowsin maa-asetuksia (Suomessa desimaali-erotin on pilkku, GlandOfGloryAmeriiikassa taasen piste).

Blaze [17.11.2003 17:32:51]

#

Niinpä niin, lokalisoinnista ei oo ku harmia -_-


Sivun alkuun

Vastaus

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

Tietoa sivustosta