String z.B "222,23" zu Deciamal umwandeln

P_H_I_L

Erfahrenes Mitglied
Hallo zusammen,
habe ein kleines java-Problem. in der Datenbank sind Preise enthalten. Als Varchar-Felder! z.B 222,23 Euro

Wie kann ich diesen String wert am geschicketesten aufbröselnt und in ein Decimal umwandeln.
Subsring nutzt mir nix, da Preise ja alle unterschiedlich sein können. z.B 22,12 Euro oder 1023,33 Euro.

Was immer gleich ist, sind die 2Nachkommastellen und das ","


Gibts ne möglichkeit?

Besten dank im Voraus...

Phil
 
Hallo.

Warum nutzt dir der Substring nichts? In Verbindung mit IndexOf(";") müsste man doch damit gut Arbeiten können ;)
 
Naja man könnte doch auch sicher erst die Position vom Komma hrausfinden, wie du meintest ist dies udn die 2 Nachkommastellen immer vorhanden.
Den Substring machste dann von dieser Position abhängig.
Parsen sollte doch auch über Double.parseDouble(String) gehen oder? Obwohl du da das Komma durch einen Punktersetzen musst ^.^
 
Hi @ all
danke für die antworten.
mir gefällt die Variante mit dem , durch . ersetzen und dann die Zahl zu Decimal umwandeln!

Danke für eure Hilfe
 
Hi,

obwohl es wohl schon erledigt ist, das Problem mit Punkt und Komma lässt sich mit NumberFormat.getInstance(Locale) lösen. Zum Auffinden des Strings würde ich Regex nehmen.
Java:
package de.sentoo.sandbox.numberParser;

// ... Import ist ausgespart.

public class NumberParser {

  public final static String DEFAULT_PATTERN = "\\d+,\\d{2}";
  private Pattern pattern;
  private NumberFormat formatter;

  public NumberParser() {
    super();
    pattern = Pattern.compile("\\d+,\\d{2}");
    formatter = NumberFormat.getInstance(Locale.GERMANY);
  }

  public Number parse(String aInput) throws ParseException {
    Number tmpRetval = null;
    Matcher tmpMatcher = pattern.matcher(aInput);
    if(tmpMatcher.find()) {
      String tmpRawValue = tmpMatcher.group();
      tmpRetval = formatter.parse(tmpRawValue);
    }
    return tmpRetval;
  }

  public static void main(String[] args) {
    try {
      List<String> tmpTestInput = new ArrayList<String>();
      tmpTestInput.add("Noch etwas Text davor 22,12 Euro");
      tmpTestInput.add("1023,33 Euro noch etwas dahinter");
      tmpTestInput.add("oder auch 222,23 Euro beides");

      NumberParser tmpNumberParser = new NumberParser();
      for (String tmpString : tmpTestInput) {
        Number tmpNumber = tmpNumberParser.parse(tmpString);
        System.out.println(tmpNumber);
      }
    } catch (ParseException e) {
      e.printStackTrace();
    }
  }
}

Ausgabe ist dann:
Code:
22.12
1023.33
222.23
 
Bei uns laufen solche Sachen gerne auf einem Server, der ist immer als default auf Englisch eingestellt ... :)

War ein Reflex *g*

Gruß Sen
 

Neue Beiträge

Zurück