Double / Floats runden



  • Du kannst die Zahl wohl so angeben aber ob das Sinn macht ist fraglich.



  • Hallo Czengis!

    Bei unserer Anwendung macht dies Sinn. Ich habe die Methode eben so umgeschrieben, dass sie auch Zahlen in Exponential-Darstellung schluckt. Dazu wird, wenn ein 'E' gefunden wird einfach dieser Teil abgeschnitten, die Methode dann rekursiv ohne die Exponential-Darstellung aufgerufen und dann der gerundete Wert wieder mit dem Exponenten zurückgegeben. Hier der Code:

    public static String toString (double d, int place)
        {
            String s= new Double(d).toString();
            int e = s.indexOf("E");
            if(e != -1)
            {
                String exp = s.substring(e, s.length());
                s=s.substring(0,e);
                return toString(new Double(s).doubleValue(), place)+exp;
            }
            else
            {
                if (place <= 0)
                    return ""+(int)(d+((d > 0)? 0.5 : -0.5));
                    s = "";
                    if (d < 0)
                    {
                        s += "-";
                        d = -d;
                    }
                    d += 0.5*Math.pow(10,-place);
                    if (d > 1)
                    {
                        int i = (int)d;
                        s += i;
                        d -= i;
                    }
                    else
                        s += "0";
                    if (d > 0)
                    {
                        d += 1.0;
                        String f = ""+(int)(d*Math.pow(10,place));
                        s += "."+f.substring(1);
                    }
                    return s;
            }
        }
    

    Gruss

    Carsten



  • Gut, wenns klappt 😉 Ihr solltet aber noch darauf achten, dass es keinen Überlauf gibt - bei mir ist aber der 7 Stelle die Zahl total "f#cked up". Das hängt wohl mit der Tatsache zusammen, dass diese Zahl nicht durch 'nen echten Bruch darstellbar ist.



  • Ui, ui

    setze 'nen Vierzeiler dagegen:

    [java]
    public String round(double number, int precision)
    {
    NumberFormat nf = NumberFormat.getInstance();
    nf.setMinimumFractionDigits(precision);
    nf.setMaximumFractionDigits(precision);
    return nf.format(number);
    }[/code]

    😉

    bis dänn, O'Dog



  • Pah, was der O'Dog kann, kann ich schon lange. 😉

    Hier kommt mein Zweizeiler:

    public String round(double number, int precision) {
    BigDecimal bd = new BigDecimal(number);
    return ("" + bd.setScale(precision, BigDecimal.ROUND_HALF_UP));
    }
    


  • doppelt LOL

    jap, dann geht der Punkt wohl an dich,
    es sei denn jetzt kommt noch jemand mit'nem Einzeiler

    O'Dog



  • [java]
    public String round(double number, int precision)
    {
    return ("" + new BigDecimal(number).setScale(precision, BigDecimal.ROUND_HALF_UP));
    }[/code]

    😃

    Na gut, der ist unfair, war ja schließlich deine Idee.

    O'Dog



  • Heyyyy das könnten wir öfter machen 🙂 Ich denke da kann man viel lernen 🙂



  • Hallo!

    Vielen Dank für eure Beiträge. Ich habe mich für O'Dogs 1. Version entschieden und diese erweitert, so dass Zahlen in Exponentialdarstellung richtig verarbeitet werden.

    Gruss

    Carsten



  • Ich verschiebe diesen Thread in die FAQ.


Anmelden zum Antworten