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.
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. :)
Kiitos,
Kappas vaan, se 146 * 0,20 = lauantaiaamun pöhöpyöristyksellä 19,20... ;)
Tai käytä Currency muuttujatyyppiä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.