将string转换为双 – Java

将逗号(例如:835,111.2)转换为Double实例的最简单正确的方法是什么?

谢谢。

看看java.text.NumberFormat 。 例如:

 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() } } 

取决于您使用的是什么样的数量,您可能需要parsing为BigDecimal 。 最简单的方法可能是:

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

或者使用带有setParseBigDecimal(true)DecimalFormat

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

最简单的并不总是最正确的。 这是最简单的:

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

我没有打扰地区,因为你明确说你想逗号replace,所以我假设你已经build立自己的逗号是千位分隔符和句号是小数点分隔符。 这里有更好的答案,如果你想正确(在国际化方面)的行为。

使用java.text.DecimalFormat:

DecimalFormat是NumberFormat的一个具体子类,用于格式化十进制数字。 它具有多种function,可以在任何语言环境中parsing和格式化数字,包括支持西方,阿拉伯和印度数字。 它还支持不同types的数字,包括整数(123),定点数(123.4),科学计数法(1.23E4),百分比(12%)和货币金额(123美元)。 所有这些都可以本地化。

一个链接可以说超过千字

 // 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); }