String parsen in BigDezimal

torax13

Erfahrenes Mitglied
Hallo,

irgendwie steh ich gerade auf dem Schlauch. Ich versuche eine als String vorliegende Zahl in ein BigDezimal zu wandeln. Ein einfaches
Java:
new BigDezimal("211.76")
funktioniert ja einwandfrei. Leider liegen die Zahlen in der deutschen Local vor ("211,76") was dann zu einem BigDezimal von 211 führt :confused:

Einen Constructor, der eine Locale übernimmt gibts in Java 1.5 leider nicht. Versuche mit NumberFormat / DezimalFormat sind auch nicht zielführend, da die enthaltene parse() Funktion kein BigDezimal zurückgibt... Und bei dem Umweg über float/double
Java:
// nur schematisch..
BigDezimal value = new BigDezimal(
      dezimalformatInstance.parse("211,76").doubleValue())
Liefert eben nicht 211,76 sondern 211,759999...

Es ist zum Haare ...
Für Hinweise dankbar, Torax
 
was ist mit:

Code:
String oldString = "216,32";
String newStringToParse = oldString.replace(",", ".");
BigDecimal bd = new BigDecimal(newStringToParse);


nur so....
 
Zuletzt bearbeitet:
Geht es denn mit der Amerikanischen Notation?
Wenn ja, dann könntest du doch ganz einfach das "," mit einem "." ersetzten. Oder hast du das schon versucht?

edit.: Ups, da war benhaze wohl schneller :p
 
Das würde sicherlich gehen, aber bei solchen 'Lösungen' rollen sich mir die Fussnägel hoch ;)

Vielen Dank für Deine Antwort, aber gibts da nichts 'schöneres'?

Gruß
 
Hallo,

schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.Locale;

/**
 * @author Tom
 */
public class Main {
	public static void main(String[] args) throws Exception {
		double value = (Double) NumberFormat.getInstance(Locale.GERMANY).parse(
				"211,76");
		System.out.println(BigDecimal.valueOf(value));
	}
}

Ausgabe:
Code:
211.76

Gruß Tom
 
Danke erstmal für die Hinweise.

Thomas, ich dachte eigentlich sowas schon probiert zu haben... Im Prinzip gehts so. Aber ;) :
Das parse() gibt je nach String entweder 'nen Double oder Long zurück. Bei einem Parameter von "123,00" kommt also ein Long zurück und Dein Cast auf Double wirft eine Exception.

Im Prinzip ist es aber ganz einfach :) DecimalFormat hat eine Funktion setParseBigDecimal(boolean), stellt man dies auf true gibt parse() ein BigDecimal zurück... Hatte ich wohl übersehen.

Vielen Dank Euch allen.

Torax
 
Zurück