Die Zahl 0,1 kann man in double nicht speichern.
Das folgende Programm zeigt Dir den echten, ungerundeten Wert an:
Code:
double schein = 0.1;
BigDecimal echt = new BigDecimal(schein);
System.out.println("Die beste Näherung an 0.1 ist " + echt);
Ausgabe:
Code:
Die beste Näherung an 0.1 ist 0.1000000000000000055511151231257827021181583404541015625
Du scheinst ja mit Geldbeträgen zu rechnen.
Die saubere Lösung ist, CENT statt EURO zu speichern, also zum Beispiel 60 statt 0.6 dann sollte es funktionieren.
SchonWiederFred hat recht. Und noch etwas allgemeiner: Modulo (%) bei float/double ist ziemlich grenzwertig... es gibt nur wenige Fälle, bei denen ich mir vorstellen könnte, dass das überhaupt Sinn macht...
Wenn's doch um Münzen geht, dann rechne doch einfach alles in die kleinste atomare einheit um: in Cents. Dann hast du nur ganze integer-zahlen, dann rechnet er auch + - * % exakt, und nicht wie bei double... :autsch: