Jump to content

Zahlenformat in Java


Olli

Recommended Posts

Hi

 

seit diesem Jahr programmiere ich (beruflich) auch in Java (früher in Delphi).

Der Zahlenformatierungskrampf in Java macht mich aber ziemlich durcheinander. Also: ich habe ein Locale Objekt, das deutsch ist, ich verwende deutsche Ländereinstellung in der Systemsteuerung, "," als Trenner. Das Locale Objekt hat ein NumberFormat, davon rufe ich die Methode parse auf, diese liefert mir

bei einem String "1,89" eine Number, die dann String "1.89" liefert

bei einem String "1.89" eine Number, die dann String "189.0" liefert

 

Double.parseDouble(num1.doubleValue) oder so ...

 

Warum macht das Ding mir einen Punkt?

Warum multipliziert es mit 100?

 

viele Grüsse

 

Olli

Link to comment
Share on other sites

Warum macht das Ding mir einen Punkt?

Warum multipliziert es mit 100?

Hi Olli,

 

wenn Du als Trenner ein Komma nimmst, dann ignoriert Java einen Punkt einfach - es multipliziert nicht mit 100, sondern pappt die Ziffern davor und danach einfach zusammen.

Es geht nur entweder oder: Punkt oder Komma, nicht beides.

Zudem reagieren nicht alle Methoden auf die Ländereinstellung - ist in Delphi auch so, da ist es ein Unterschied, ob Du die VAL-Funktion oder die String-Umwandlungsfunktion nimmst.

Allgemein würde ich Dir raten, immer den Punkt zu nehmen, das ist internationaler, und, wenn Du eine Eingabe mit Komma ebenfalls zulassen willst, das Komma während der Eingabe "von Hand" in einen Punkt zu wandeln.

 

 

Edit: Oh Shit! Dabei hatte ich mir so fest vorgenommen, in meinem 666-sten Posting was ganz besonders teuflisches und lästerliches zu schreiben... ;-)

 

Gruß Ralf

Edited by Rinf
Link to comment
Share on other sites

Warum macht das Ding mir einen Punkt?

Warum multipliziert es mit 100?

Hi Olli,

 

wenn Du als Trenner ein Komma nimmst, dann ignoriert Java einen Punkt einfach - es multipliziert nicht mit 100, sondern pappt die Ziffern davor und danach einfach zusammen.

Es geht nur entweder oder: Punkt oder Komma, nicht beides.

Zudem reagieren nicht alle Methoden auf die Ländereinstellung - ist in Delphi auch so, da ist es ein Unterschied, ob Du die VAL-Funktion oder die String-Umwandlungsfunktion nimmst.

Allgemein würde ich Dir raten, immer den Punkt zu nehmen, das ist internationaler, und, wenn Du eine Eingabe mit Komma ebenfalls zulassen willst, das Komma während der Eingabe "von Hand" in einen Punkt zu wandeln.

 

 

Edit: Oh Shit! Dabei hatte ich mir so fest vorgenommen, in meinem 666-sten Posting was ganz besonders teuflisches und lästerliches zu schreiben... ;-)

 

Gruß Ralf

Hi Rinf,

 

ok, mein Punkt wird ignoriert, und dann wird aus 1.89 also 189. Verstanden. In Delphi ist mir das schon klar, da gibts ja den globalen DecimalSeparator, und dann weiss man, was Sache ist. Also ob auf dem verwendeten System nun Punkt oder Komma der Trenner ist.

 

Nun hab ich in meinem Ausgangsfile z.B. ein Komma (was ja bei einer deutschen Ländereinstellung Sinn macht). Also z. B. "1233,00" oder so.

 

Nun lese ich das ein, indem ich das File ausparse, und die Werte letztendlich per SQL in eine Datenbank schreibe. Dort landet der Wert dann letztendlich als "1.233" in der Ansicht. Würg. Nun weiss man gar nicht, da Punkt ansonsten auch als Dezimaltrenner verwendet wird, ob damit eins komma ... gemeint ist oder 1233 (was es ja eigentlich ist).

 

Liegt aber nicht an der Ansicht der Datenbank, sondern der Wert (den ich ja letztendlich wieder als String reinschreiben muss wg. SQL kommt als String "1.233" rein). Ich hab nun den ganzen Code nicht im Kopf, aber irgendwo scheint mir Java 1233 erkannt zu haben, mir dann aber wohlmeinend einen Tausendertrenner reinzuwürgen, der dann später per SQL in der Datenbank landet.

 

viele Grüsse

 

Olli

Link to comment
Share on other sites

Wenn wir schon einen Programmierthread haben, haette ich auch eine Frage:

 

Kennt jemand ein gutes OpenGL Tutorial? Ich habe zur Pruefungsvorbereitung einen Kommandozeilen-Raytracer geschrieben (man gibt eine Datei mit Triangulierungen und Szenendefinitionen und bekommt ein Bitmap mit dem geraytacten Bild) und wuerde jetzt gerne dazu den passenden grafischen NURBS Editor haben, nur bin ich weder der Qt noch der OpenGL Held.

 

Kennt da jemand eine gute Einfuehrung zum Thema?

 

Danke.

Link to comment
Share on other sites

Hallo Elrond,

bei Deiner Frage fällt mir ein Witz ein:

 

 

Ein neues Schuljahr hat begonnen.

Die 3. Klasse bekommt einen neuen Lehrer. In der ersten

Stunde sollen sich alle Schülerinnen und Schüler vorstellen.

Nach den Namen der Eltern fragt der Lehrer nach den Berufen der Mütter und Väter.

Als der 8-jährige Hans-Heinrich an der Reihe ist, druckst er ziemlich herum

und sagt schließlich verlegen: "Mein Vater spielt Klavier im Bordell."

Der Lehrer kann es kaum glauben und hakt nach, aber Hans-Heinrich bleibt dabei.

 

Als die Schule aus ist, möchte sich der Lehrer vergewissern und ruft den Vater an. Der Vater sagt zum Lehrer:

 

"Das mit dem Klavier im Bordell ist eine Notlüge.

Eigentlich arbeite ich in einem Softwarehaus und erstelle zur Zeit einen Kommandozeilen-Raytracer.

Dieser liest eine Datei mit Triangulierungen und Szenendefinitionen und erzeugt ein Bitmap mit dem geraytacten Bild.

Hierfür programmiere ich auch dazu den passenden grafischen NURBS Editor.

Aber wie erklär ich das einem 8-Jährigen?"

 

 

 

gruss

peter

Edited by pmn
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...