Sorry,
dass ihr alle jetzt für meinen Ärger herhalten müßt, aber ich muß das jetzt mal los werden. Überall heißt es immer Java, Java, ja Java. Im Großen und Ganzen ist es ja ok, und wenn man denkt wie seine Anfänge waren auch. Aber leider haben die genialen Entwickler auch so manchen Sch..ß eingebaut. Und es wird nicht darüber geredet, bzw. geschrieben.
So wurde bei den primitiven Datentypen der Typ für finanzgenaue Fließkommazahlen schlicht vergessen. Ok, ist nicht nicht so schlimm. Kann vorkommen. Hätte mir auch passieren können.
Was mir aber nicht passiert wäre ist, dass ich das dann nur in Form der Klasse BigDecimal nachimplementiert hätte. Ich hätte einen echten primitiven Datentyp nachimplementiert. Die Klasse BigDecimal ist ein Krampf.
ließt sich doch schon mal kacke.
Und dann was mir gerade wieder passiert ist: Ich möchte zwei Geldbeträge auf Gleichheit prüfen:
geldBetrag1 - geldBetrag2 == 0.01
Das Ganze sah vereinfacht ungefähr so aus:
Dass hier mal true zurückgeliefert wird, darauf kann ich ewig warten. Ich weiß schon was mein Fehler war. Aber eine For-Schleife mit
sieht doch einfach sch..ße aus und ich vergesse immer wieder, dass ich von Grund auf immer BigDecimal verwenden muß, wenn's wirklich genau sein soll.
Ich könnt's ja auch noch verkraften, wenn's in allen Programmiersprachen so wäre, aber ich habe jahrelang Delphi programmiert und dort gibt's den primitiven float-Datentyp "currency". Es ist halt schwer vom Komfort wieder runterzukommen. Umgekehrt wär's leichter.
Wie könnt ihr mir helfen? Meine Frage ist einfach die: Gibt's noch mehr Leute, die so empfinden wie ich? Oder nehmt ihr das einfach "Java"-gegeben hin?
Grüße
Wolfgang
PS: Hier noch ein Link zu einem Blog von Markus Kühle, den er unter javathreads.de am 05.03.2009 veröffentlicht hat.
http://javathreads.de/2009/03/niemals-mit-den-datentypen-float-oder-double-geldbetraege-berechnen/
Er spricht den Umstand zwar an, aber er läßt sich auch nicht über die "Eleganz" der Alternativen aus.
dass ihr alle jetzt für meinen Ärger herhalten müßt, aber ich muß das jetzt mal los werden. Überall heißt es immer Java, Java, ja Java. Im Großen und Ganzen ist es ja ok, und wenn man denkt wie seine Anfänge waren auch. Aber leider haben die genialen Entwickler auch so manchen Sch..ß eingebaut. Und es wird nicht darüber geredet, bzw. geschrieben.
So wurde bei den primitiven Datentypen der Typ für finanzgenaue Fließkommazahlen schlicht vergessen. Ok, ist nicht nicht so schlimm. Kann vorkommen. Hätte mir auch passieren können.
Was mir aber nicht passiert wäre ist, dass ich das dann nur in Form der Klasse BigDecimal nachimplementiert hätte. Ich hätte einen echten primitiven Datentyp nachimplementiert. Die Klasse BigDecimal ist ein Krampf.
Java:
BigDecimal zahl = new BigDecimal("3.0023").add(new BigDecimal("1.0"));
ließt sich doch schon mal kacke.
Und dann was mir gerade wieder passiert ist: Ich möchte zwei Geldbeträge auf Gleichheit prüfen:
geldBetrag1 - geldBetrag2 == 0.01
Das Ganze sah vereinfacht ungefähr so aus:
Java:
for (double differenz = 0.01; differenz <= 0.01; differenz += 0.01) {
if (differenzOk(new BigDecimal(differenz))) {
// tue was
}
}
private boolean differenzOk(BigDecimal differenz) {
if (geldBetrag1.subtract(geldBetrag2).compareTo(differenz)) {
return true;
}
else {
return false;
}
}
Java:
for (BigDecimal differenz = new BigDecimal("0.01"); differenz.doubleValue() <= 0.10001; differenz = differenz.add(new BigDecimal("0.01"))) {
Ich könnt's ja auch noch verkraften, wenn's in allen Programmiersprachen so wäre, aber ich habe jahrelang Delphi programmiert und dort gibt's den primitiven float-Datentyp "currency". Es ist halt schwer vom Komfort wieder runterzukommen. Umgekehrt wär's leichter.
Wie könnt ihr mir helfen? Meine Frage ist einfach die: Gibt's noch mehr Leute, die so empfinden wie ich? Oder nehmt ihr das einfach "Java"-gegeben hin?
Grüße
Wolfgang
PS: Hier noch ein Link zu einem Blog von Markus Kühle, den er unter javathreads.de am 05.03.2009 veröffentlicht hat.
http://javathreads.de/2009/03/niemals-mit-den-datentypen-float-oder-double-geldbetraege-berechnen/
Er spricht den Umstand zwar an, aber er läßt sich auch nicht über die "Eleganz" der Alternativen aus.
Zuletzt bearbeitet von einem Moderator: