Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Pyöristysprobleema

Silmu [27.01.2007 11:58:57]

#

Helou,

Taas menee yli ymmärryksen. Ohjelmassani on "hintalaskuri", joka päivyttyy ehtojen toteutuessa tyyliin:

hinta = hinta + 0.20

Ihmetyksen aiheeni on se, että hinta on aina aluksi 0. Tämän jälkeen päälle tulee noita 0.20 lisäyksiä niin monta kertaa kuin ehdot toteutuvat.

Sitten kun toteutuneta on esimerkiksi 146, niin hinta ei yhtäkkiä olekaan 146 x 0,20 = 19,20 vaan jotain tyyliin 19,2031?

Miksi näin ja mahtaisiko jollain olla ratkaisua tähän ongelmaan? Tarkotus olisi kuitenkin saada aina tulokseksi tuo "normaalimatematiikalla" laskettu tulos.

Tack.

Sami [27.01.2007 12:41:33]

#

Liukuluvuilla laskettaessa tulee aina jonkin verran pyöristysvirhettä, mutta ei sitä sentään noin paljoa pitäisi tulla.

Kuitenkin jos tarkoituksenasi on käsitellä vain kokonaisia senttejä, niin voit vaihtaa muuttujatyypin kokonaisluvuksi ja vasta tulostusvaiheessa muuttaa sen desimaaliesitykseksi.

Käytännössä siis laskuvaiheessa kertoisit hinnan sadalla ja tulostusvaiheessa joko muutat sen liukuluvuksi tai hoidat tulostuksen näin:

int eurot = hinta / 100;
int sentit = hinta % 100;
print (eurot + "," + sentit);

int = kokonaislukumuuttuja ja % = jakojäännösoperaattori.


P.S. kummallinen normaalimatematiikka muuten kun 146 * 0,20 = 19,20 eikä 29,20. :)

Silmu [27.01.2007 12:48:40]

#

Kiitos,

Kappas vaan, se 146 * 0,20 = lauantaiaamun pöhöpyöristyksellä 19,20... ;)

Merri [27.01.2007 18:44:06]

#

Tai käytä Currency muuttujatyyppiä.

Vastaus

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

Tietoa sivustosta