BigDecimal Dezimaltrennzeichen

jodevelopment

Grünschnabel
Hallo zusammen,

wer weiß Rat:

Aus einer jsp-Seite bekomme ich einen String mit Preisangaben.
Also z.B. "120,99"

In der Java-Bean wird dieser Wert in einem BigDecimal-Typ gespeichert.
Hier gibt es jedoch eine NumberFormatException aufgrund
des deutschen Kommas als Trennzeichen.

Also muß ich den String in das Format "120.99" bringen.
Ein simples .replace reicht jedoch nicht sehr weit, da ja auch amerikanische Formate wie "100,205,647.97" vorkommen können.

Wenn ich den String in einen Double umwandle, dann die Formatierung vornehme und dann wieder in BigDecimal umwandle, könnte es darüber hinaus zu Rundungsfehlern kommen.

Gerne würde ich den String Konstruktor von BigDecimal weiter benutzen,
da dieser auch im SDK empfohlen wird.

Hat jemand eine Idee wie die internationalen Zahlenformate, die über eine
Webseite hereinkommen, am besten verarbeitet werden können?

Danke im voraus
jo
 
Hallo,

schau mal hier:
Java:
package de.tutorials;

import java.text.DecimalFormat;
import java.util.Locale;

public class DecimalFormatExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		String value = "120,99";
		System.out.println(DecimalFormat.getInstance(Locale.GERMANY).parse(value));
	}

}

Gruß Tom
 
Als kleiner Einwurf.

Du kannst auch das Komma entfernen und speicherst nur die Centbeträge. Dadurch kannst du wieder mit Ganzzahlen arbeiten, was natürlich besser vom handling ist.
 
Danke für Eure Vorschläge!

Thomas: Durch .parse wird der String jedoch erstmal in ein Numer (Double) Format umgewandelt. Gibt es dadurch nicht (wenn auch nur geringfügige) Verluste? Aber wahrscheinlich kommt man da nicht drum herum....


Anime-Otaku: was meinst Du mit "Ganzzahlen weiterarbeiten"? Also, wie früher mit 100 multiplizieren und dann mit Long/Int arbeiten? Das funktioniert nur wenn Du ein bestimmtes Format vorschreibst. Das kann aber bei einer Web-Seite ganz 'strange' aussehen...

Vielleicht noch weitere Ideen?

Gruß
jo
 
Ich meinte das du einfach das Komma aus dem String entfernst und den Zahlenstring dann einfach als int/long parsed.

Das wird heute immer noch gerne gemacht. Da binär es einfacher ist ganzzahlen darzustellen und mit diesen zu berechnen.
 
Zurück