Best practice: Multiplizieren zweier Zahlen
-
Headhunter schrieb:
das prinzipielle Problem mit den Doubles und der Nichtdarstellbarkeit von einigen Zahlen ist mir bekannt. Ich habe aber eigentlich erwartet, dass die Java VM sich um dieses Detail kümmert...
Das ist doch ein Problem mit dem Binärsystem. Dass das die VM weg machen würde, wäre mir neu und wohl auch sehr aufwendig.
Die DecimalFormat Klasse habe ich gesehen - dort werden in einigen Artikeln im Ernst Strings eingegeben um zu rechnen. Wtf???
Ich wollte nur wissen, ob mein bloated Weg OK ist?Naja, wenn man sich das so überlegt, dann muss man entweder mit mehreren Integern oder mit nem String rechnen (wie wir Menschen ja auch). Wenn man nur mit float oder double rechnet, wird man nie die Genauigkeit haben.
Wenn du es genau brauchst (z.B. für Finanzen), dann würde ich nicht mit double rechnen.
-
Hat denn einer ein Beispiel, wie man zuverlässig mit Finanzwerten arbeitet? Ich find das sehr nervig...
-
Headhunter schrieb:
Hat denn einer ein Beispiel, wie man zuverlässig mit Finanzwerten arbeitet?
Eine Möglichkeit wäre, mit Ganzzahlen zu rechnen. ...also mit long. ...wenn Du es "richtig" machen willst, wirst Du aber nicht daran vorbeikommen, einen eigenen Datentyp dafür zu erstellen, der vielleicht intern long nutzt, aber nach außen hin halt alle möglichen Methoden anbietet, die so ein Datentyp halt haben sollte. Dieser Datentyp würde dann vermutlich auch ein Feld enthalten, das die Währung beschreibt.
-
Headhunter schrieb:
Hat denn einer ein Beispiel, wie man zuverlässig mit Finanzwerten arbeitet?
Dazu gibt es die beiden Klassen BigDecimal bzw. BigInteger.
MfG,
Hilefoks
-
Hilefoks schrieb:
Headhunter schrieb:
Hat denn einer ein Beispiel, wie man zuverlässig mit Finanzwerten arbeitet?
Dazu gibt es die beiden Klassen BigDecimal bzw. BigInteger.
Hi.
Die sind dazu eben nicht da.
-
Sondern?
-
Mr. N schrieb:
Sondern?
Lesefaul? Gregor hat doch schon seinen Vorschlag gepostet.
MfG SideWinder
-
-
Danke für den Link, hilft mir weiter!
Was ist bei Java echt am meisten vermisse ist die .NET Standardbibliothek und die C# Sprachfeatures. Aber man kann ja nicht immer alles haben...
-
SideWinder schrieb:
Mr. N schrieb:
Sondern?
Lesefaul? Gregor hat doch schon seinen Vorschlag gepostet.
Ich hätte die Frage so verstanden, dass er wissen will, für was die dann sind und wieso nicht dafür.
-
Was spricht eigentlich gegen (Edit: Naja, ist eigentlich eh Gregors Vorschlag...):
class MoneyAmount { /** Currency */ private final Currency currency; /** Amount of money multiplied by 100 */ private final long amount; ... public long getAmount() { return amount; } public long getCents() { return amount % 100; } public long getGibtsDafürÜberhauptEinWort() { return amout - getCents(); } }
MfG SideWinder
-
@hmm??: Ich hab die bisher nur bei der Implementierung von verschiedenen kryptografischen Algorithmen in der Schule benutzt. Die Schnittstelle deutet darauf hin, dass sie darauf auch ausgelegt sind.
MfG SideWinder
-
Faktor 100 ist wenig international. Das sollte man flexibler lösen.