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....
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.
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.
Ihan vain näin knoppitietona QB:ssä (ja ilmeisesti myös VB:ssä) '/'-merkillä (vinoviiva? kauttaviiva?) suoritetaan liukuluku-jakolasku ja '\' (kenoviiva) kokonaisluku-jakolasku.
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
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
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
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).
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)
Kittän jälleen kerran kaikkia korvaamattomasta avusta. csng functio ratkaisi kaiken....
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).
Niinpä niin, lokalisoinnista ei oo ku harmia -_-
Aihe on jo aika vanha, joten et voi enää vastata siihen.