Avatar billede simonvalter Praktikant
29. april 2004 - 09:54 Der er 7 kommentarer og
1 løsning

bruge int/long istedet for double?

jeg parser en xml fil hvor jeg får nogle floating point tal ind som string.
http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml
mit problem er at jeg ikke kan bruge double da det er j2me

jeg vil tro man selv kan holde styr på decimalerne, men jeg kan ikke lige finde ud af hvordan.

før har jeg bare gjordt sådan

    public double convert(double ammountP, double fromP, double toP)
    {
        double euro = ammountP / fromP;
        return euro * toP;
    }

håber der er nogen der kan hjælpe for det vil være lidt kedeligt hvis jeg skal cutte decimalerne væk ;)
Avatar billede arne_v Ekspert
29. april 2004 - 10:11 #1
Tja.

fixed point = int med cifre + byte som angiver antal decimaler

parse: cifre = parse uden punktum, antal decimaler = tal efter punktum

add/sub: skaler tal så antal cifre er ens (*10 og +1), normal add/sub

mul: cifre = mul, antal decimaler = add

etc.

(måske)
Avatar billede simonvalter Praktikant
29. april 2004 - 11:14 #2
ja det er nok den vej man skal, desværre ikke noget jeg har tid til lige nu ;)

men jeg har heldigvis fundet MathFP
http://home.rochester.rr.com/ohommes/MathFP/

smidt et svar
Avatar billede arne_v Ekspert
29. april 2004 - 11:26 #3
ok (selvom jeg ikke synes at jeg har bidraget med meget)
Avatar billede arne_v Ekspert
29. april 2004 - 11:26 #4
PS: Jeg tror iøvrigt at jeg har liggend enoget C++ fixed point kode ...
Avatar billede simonvalter Praktikant
29. april 2004 - 11:28 #5
det vil jeg da godt se.

men jo du har hjulpet rigeligt, da jeg så hvor besværligt det ville være googlede jeg lige et par gange til ;)
Avatar billede arne_v Ekspert
29. april 2004 - 11:56 #6
Jge poster det i aften.
Avatar billede arne_v Ekspert
29. april 2004 - 19:58 #7
Jeg kan ikke finde det kode.

:-(

Som kompensation lavede jeg lige noget simpel kode som viser hvor simpelt det er:

public class FixedPoint {
    private int scalval;
    private byte ndec;
    private final static int[] scal = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000 };
    public FixedPoint(int val, int ndec) {
        scalval = val * scal[ndec];
        this.ndec = (byte)ndec;
    }
    public FixedPoint(String val, int ndec) {
        this(Integer.parseInt(val), ndec);
    }
    private FixedPoint(int scalval, byte ndec) {
        this.ndec = ndec;
        this.scalval = scalval;
    }
    public FixedPoint add(FixedPoint fp) {
        if(this.ndec != fp.ndec) {
            throw new RuntimeException("Different scale");
        }
        return new FixedPoint(this.scalval + fp.scalval, this.ndec);
    }
    public FixedPoint sub(FixedPoint fp) {
        if(this.ndec != fp.ndec) {
            throw new RuntimeException("Different scale");
        }
        return new FixedPoint(this.scalval - fp.scalval, this.ndec);
    }
    public FixedPoint mul(FixedPoint fp) {
        if(this.ndec != fp.ndec) {
            throw new RuntimeException("Different scale");
        }
        return new FixedPoint(this.scalval * fp.scalval / scal[this.ndec], this.ndec);
    }
    public FixedPoint div(FixedPoint fp) {
        if(this.ndec != fp.ndec) {
            throw new RuntimeException("Different scale");
        }
        return new FixedPoint(this.scalval * scal[this.ndec]/ fp.scalval, this.ndec);
    }
    public String toString() {
        return Integer.toString(scalval / scal[ndec]) + "." + Integer.toString(scalval % scal[ndec]);
    }
    public static void main(String[] args) {
        System.out.println((1.0+2.0)*3.0/4.0);
        FixedPoint one = new FixedPoint(1, 2);
        FixedPoint two = new FixedPoint(2, 2);
        FixedPoint three = new FixedPoint("3", 2);
        FixedPoint four = new FixedPoint("4", 2);
        System.out.println(one.add(two).mul(three).div(four));
    }
}
Avatar billede simonvalter Praktikant
29. april 2004 - 20:22 #8
nice.. jeg er også kun lige begyndt at læse rigtigt på c++ så java er nok bedre :)
og MathFP bruger en masse bitwise operators så det forstår jeg ikke meget af, men det her eksempel ser ud til at kunne gøre det.
Mange tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester