将字符串转换为Double - Java

Rod*_*Rod 25 java format

将带逗号的字符串数字(例如:835,111.2)转换为Double实例的最简单,最正确的方法是什么.

谢谢.

Jon*_*eet 47

看看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()
    }
}
Run Code Online (Sandbox Code Playgroud)

根据您使用的数量类型,您可能希望解析为BigDecimal.最简单的方法可能是:

BigDecimal value = new BigDecimal(str.replace(",", ""));
Run Code Online (Sandbox Code Playgroud)

或者使用DecimalFormat具有setParseBigDecimal(true):

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


pax*_*blo 10

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

String s = "835,111.2";
// NumberFormatException possible.
Double d = Double.parseDouble(s.replaceAll(",",""));
Run Code Online (Sandbox Code Playgroud)

我没有打扰过locales,因为你明确表示你想要删除逗号,所以我假设你已经将自己建立为逗号是一个区域设置,逗号是千位分隔符,句点是小数分隔符.如果你想要正确的(在国际化方面)行为,这里有更好的答案.


ska*_*man 5

使用java.text.DecimalFormat:

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