Math.round() funktioniert nicht

Hallo Leute,
Eigentlich dachte ich, die Math.round() sei eine ziemlich sichere Sache. Aber irgendwas schein bei mir schief zu gehen

Ich habe ein array grenzleistungen. Damit erstelle ich einen Mittelwert grenz_mittel, welchen ich anschließend auf eine ganze Zahl runde, aber weiterhin als double abspeichern möchte:

grenz_mittel = grenz_mittel/grenzleistungen.size();
grenz_mittel = Math.round(grenz_mittel)/1.0;

Bei der Ausgabe erhalte ich dann aber
grenz_mittel = 1090.1666666666667.

Kennt jemand dieses Verhalten? Sowas sollte doch eigentlich nicht passieren, oder mache ich was falsch?
Grüße,
AceOfSpades

Ein Bug in round() dürfte ausgeschlossen sein.

Du hast nicht den ganzen Code gepostet, der Fehler liegt an anderer Stelle…

Welchen Wert hat den grenzmittel vor dem runden?

Jetzt wo dus sagst fühle ich mich ziemlich doof, steht doch die Zeile drunter

gear.setCriterionValue(c, grenz_mittel/grenzleistungen.size());

dann hat gear natürlich nicht das gerundete Ergebnis -.-
Die Mods dürfen das hier gerne löschen, hat schließlich keinen Nutzen für irgendjemanden…

als Mahnmal immer ein Nutzen, siehe BER, S21, Elbphilharmonie usw. :wink:

Mittelwert berechnen:

        double res = 0;
        for (Number number : numbers) {
            res += number.doubleValue();
        }
        return new Number[]{res / numbers.length, Math.round(res / numbers.length)};
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException, InterruptedException {
        System.out.println(Arrays.toString(mittel(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)));```

Alternativ eine Methode mit nur long und eine mit nur double.
Alternativ auch Methoden mit Big...
null/leer bei varargs?

Hth....

Edit: Die Ausgabe hat aber kein Gewicht, also 4 hat nicht so besonders zu bedeuten.

(Nicht) 0-prüfen:

```            if (number.doubleValue() >= -0.1 && number.doubleValue() <= 0.1) {
                
            }```