Nächst kleineres Vielfaches zu einer Zahl



  • Hi,

    ich suche für einen Algorithmus das nächst kleine Vielfache einer bestimten Konstanten c bezüglich einer Zahl x. z.B.

    c := 0.02
    x := 1.91433
    

    Dann ist die gesuchte Zahl 1.9.

    Ich hab mir folgendes überlegt:

    double zahl = ((int)(x/c))*c;
    

    Klappt fast, es ergibt aber leider 1.9000000000000001. Wie löse ich das denn jetzt? Möglich effizient?

    Schöne Grüße

    Jo :schland:



  • Das Problem dürfte nur die Genauigkeit von double sein, die Darstellung von Fließkommazahlen im Rechner läuft nunmal nicht ganz rundungslos ab. Wenn dir diese Genauigkeit nicht ausreicht und das exakt berechnet sein muss, musst du wohl oder übel auf BigDecimal umsteigen.

    Edit: Auch bei BigDecimal aber aufpassen und nicht jetzt leichtfertig den Rundungsfehler wieder über implizite doubles hereinholen! new BigDecimal(0.1) <- fail.

    MfG SideWinder


Log in to reply