Konvertiere einen String in Double – Java

Was ist der einfachste und korrekte Weg, eine String-Nummer mit Kommas (zB: 835, 111.2) in eine Double-Instanz zu konvertieren.

Vielen Dank.

   

Sehen Sie sich java.text.NumberFormat . Beispielsweise:

 import java.text.*; import java.util.*; public class Test { // Just for the sake of a simple test program! public static void main(String[] args) throws Exception { NumberFormat format = NumberFormat.getInstance(Locale.US); Number number = format.parse("835,111.2"); System.out.println(number); // or use number.doubleValue() } } 

Je nachdem, welche Art von Menge Sie verwenden, möchten Sie möglicherweise stattdessen ein BigDecimal analysieren. Der einfachste Weg, dies zu tun, ist wahrscheinlich:

 BigDecimal value = new BigDecimal(str.replace(",", "")); 

oder verwende ein DecimalFormat mit setParseBigDecimal(true) :

 DecimalFormat format = (DecimalFormat) NumberFormat.getInstance(Locale.US); format.setParseBigDecimal(true); BigDecimal number = (BigDecimal) format.parse("835,111.2"); 

Das Einfachste ist nicht immer das Richtige. Hier ist das einfachste:

 String s = "835,111.2"; // NumberFormatException possible. Double d = Double.parseDouble(s.replaceAll(",","")); 

Ich habe mich nicht mit Gebietsschemata beschäftigt, da Sie ausdrücklich angegeben haben, dass Sie Kommas ersetzen möchten, also nehme ich an, dass Sie sich bereits als Gebietsschema mit Komma festgelegt haben, ist das Tausendertrennzeichen und der Punkt ist das Dezimaltrennzeichen. Hier gibt es bessere Antworten, wenn Sie (im Sinne von Internationalisierung) korrekt handeln wollen.

Verwenden Sie java.text.DecimalFormat:

DecimalFormat ist eine konkrete Unterklasse von NumberFormat, die Dezimalzahlen formatiert. Es verfügt über eine Vielzahl von functionen, die es ermöglichen, Zahlen in jedem Gebietsschema zu analysieren und zu formatieren, einschließlich der Unterstützung für westliche, arabische und indische Ziffern. Es unterstützt auch verschiedene Arten von Zahlen, einschließlich Ganzzahlen (123), Festkommazahlen (123,4), wissenschaftliche Notation (1,23E4), Prozentangaben (12%) und Währungsbeträge (123 $). All diese können lokalisiert werden.

Ein Link kann mehr als tausend Worte sagen

 // Format for CANADA locale Locale locale = Locale.CANADA; String string = NumberFormat.getNumberInstance(locale).format(-1234.56); // -1,234.56 // Format for GERMAN locale locale = Locale.GERMAN; string = NumberFormat.getNumberInstance(locale).format(-1234.56); // -1.234,56 // Format for the default locale string = NumberFormat.getNumberInstance().format(-1234.56); // Parse a GERMAN number try { Number number = NumberFormat.getNumberInstance(locale.GERMAN).parse("-1.234,56"); if (number instanceof Long) { // Long value } else { // Double value } } catch (ParseException e) { } 
  There is small method to convert german price format public static BigDecimal getBigDecimalDe(String preis) throws ParseException { NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN); Number number = nf.parse(preis); return new BigDecimal(number.doubleValue()); } ---------------------------------------------------------------------------- German format BigDecimal Preis into decimal format ---------------------------------------------------------------------------- public static String decimalFormat(BigDecimal Preis){ String res = "0.00"; if (Preis != null){ NumberFormat nf = NumberFormat.getInstance(Locale.GERMANY); if (nf instanceof DecimalFormat) { ((DecimalFormat) nf).applyPattern("###0.00"); } res = nf.format(Preis); } return res; } --------------------------------------------------------------------------------------- /** * This method converts Deutsche number format into Decimal format. * @param Preis-String parameter. * @return */ public static BigDecimal bigDecimalFormat(String Preis){ //MathContext mi = new MathContext(2); BigDecimal bd = new BigDecimal(0.00); if (!Util.isEmpty(Preis)){ try { // getInstance() obtains local language format NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN); nf.setMinimumFractionDigits(2); nf.setMinimumIntegerDigits(1); nf.setGroupingUsed(true); java.lang.Number num = nf.parse(Preis); double d = num.doubleValue(); bd = new BigDecimal(d); } catch (ParseException e) { e.printStackTrace(); } }else{ bd = new BigDecimal(0.00); } //Rounding digits return bd.setScale(2, RoundingMode.HALF_UP); }