在Java中将字符串转换为双精度浮点数

328

如何在Java中将"12.34"这样的String转换为double?


4
这三个回答基本上只是重复了几年前发布的得到最高票数的答案,但它们确实获得了很多赞。 - Bernhard Barker
14个回答

511

您可以使用Double.parseDouble()方法将一个 String 转换为 double 类型:

String text = "12.34"; // example String
double value = Double.parseDouble(text);

对于你的情况,看起来你想要:

double total = Double.parseDouble(jlbTotal.getText());
double price = Double.parseDouble(jlbPrice.getText());

4
@TinyBelly:是的,看起来你需要这样写:double total = Double.parseDouble(jlbTotal.getText()); - WhiteFang34
2
@TinyBelly:你需要从字符串中提取要解析为double的文本部分。以下是一种你可以尝试的方法,但我不能保证它适用于所有情况:double total = Double.parseDouble(jlbTotal.getText().replaceAll("[^0-9.]", "")); - 这基本上将所有不是数字或的字符替换为空,只留下数字和小数点进行解析。 - WhiteFang34
4
双精度浮点数用于价格计算不可取。 - Bozho
你可以查看DecimalFormatSymbols来获取运行时的小数分隔符,这比硬编码更好。 - mike
4
对于那些在搜索类Double的结果时被吸引到这里而不是原始类型double,请使用Double.valueOf(String) - Pshemo
显示剩余3条评论

57

如果您在将字符串解析为十进制值时遇到问题,您需要将数字中的“,”替换为“。”

String number = "123,321";
double value = Double.parseDouble( number.replace(",",".") );

2
另一个选项: DecimalFormat df = new DecimalFormat(); DecimalFormatSymbols sfs = new DecimalFormatSymbols(); sfs.setDecimalSeparator(','); df.setDecimalFormatSymbols(sfs); df.parse(number); - Robertiano

40

要将字符串转换回双精度浮点数,请尝试以下方法

String s = "10.1";
Double d = Double.parseDouble(s);

parseDouble方法可以实现所需效果,Double.valueOf()方法也可以。


2
不,String.valueOf(something)返回something的字符串表示形式:如果something是内置类型或者它是一个对象且为null,则等效于someObject.toString(),否则等效于someObject.toString()。 要从String中获取Double,必须像其他答案所示的那样反过来做(Double.valueOf(someString)返回Double,而Double.parseDouble(someString)返回double)。 - jpp1

37
double d = Double.parseDouble(aString);

这段代码会将字符串aString转换为双精度浮点数d。


aString 是指什么?你能帮我解释一下吗? - TinyBelly
2
aString只是一个字符串。更具体地说,它是您想要转换为数字的字符串。 - Andreas Vinter-Hviid

31

使用new BigDecimal(string)。这将确保后续计算的正确性。

一般来说,像货币这样敏感的计算总是要使用BigDecimal

例如:

String doubleAsString = "23.23";
BigDecimal price = new BigDecimal(doubleAsString);
BigDecimal total = price.plus(anotherPrice);

20

您只需要使用Double解析字符串值

String someValue= "52.23";
Double doubleVal = Double.parseDouble(someValue);
System.out.println(doubleVal);

17

再次引用来自Robertiano的话 - 因为这是到目前为止最通用和适应本地化的版本。它值得一篇完整的文章!

另一个选项:

DecimalFormat df = new DecimalFormat(); 
DecimalFormatSymbols sfs = new DecimalFormatSymbols();
sfs.setDecimalSeparator(','); 
df.setDecimalFormatSymbols(sfs);
double d = df.parse(number).doubleValue();

8
String double_string = "100.215";
Double double = Double.parseDouble(double_string);

6
还有另一种方法。
Double temp = Double.valueOf(str);
number = temp.doubleValue();

Double是一个类,而"temp"是一个变量。 "number"是你要找的最终数字。


1
从Java 5开始,由于自动装箱/拆箱,您可以将Double直接赋值给double。相关:Double.parseDouble(string)和Double.valueOf(string)之间的区别是什么? - Bernhard Barker

4

这是我会做的事情。

    public static double convertToDouble(String temp){
       String a = temp;
       //replace all commas if present with no comma
       String s = a.replaceAll(",","").trim(); 
      // if there are any empty spaces also take it out.          
      String f = s.replaceAll(" ", ""); 
      //now convert the string to double
      double result = Double.parseDouble(f); 
    return result; // return the result
}

例如,您输入字符串 "4 55,63. 0",输出将是双精度数字 45563.0。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接