在Java中尝试将字符串值转换为双精度时发生异常

在Java中尝试将字符串值转换为双精度时发生异常,java,types,Java,Types,我在尝试将字符串转换为双精度字符串时遇到以下错误 For input string: "1,514,230.15" Exception: java.lang.NumberFormatException: For input string: "1,514,230.15" at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at sun.misc.FloatingDecimal.parseDouble(U

我在尝试将字符串转换为双精度字符串时遇到以下错误

For input string: "1,514,230.15"

Exception:
java.lang.NumberFormatException: For input string: "1,514,230.15"
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
    at java.lang.Double.parseDouble(Unknown Source)
这是我正在使用的代码行

 testString = "1,514,230.15"
 double d= Double.parseDouble(TestString);

有人能帮我理解我做错了什么吗?

解决方案1:

String testString = "1,514,230.15".replace(",", "");
double d = Double.parseDouble(testString);
System.out.println(d);
String input = "1,514,230.15";
NumberFormat numberFormat = NumberFormat.getInstance(Locale.US);
double result = numberFormat.parse(input).doubleValue();
System.out.println(result);
String testString = "1514230.15";
double d= Double.parseDouble(testString);
System.out.println(d);
1514230.15
1514230.15
或解决方案2:

String testString = "1,514,230.15".replace(",", "");
double d = Double.parseDouble(testString);
System.out.println(d);
String input = "1,514,230.15";
NumberFormat numberFormat = NumberFormat.getInstance(Locale.US);
double result = numberFormat.parse(input).doubleValue();
System.out.println(result);
String testString = "1514230.15";
double d= Double.parseDouble(testString);
System.out.println(d);
1514230.15
1514230.15
或解决方案3:

String testString = "1,514,230.15".replace(",", "");
double d = Double.parseDouble(testString);
System.out.println(d);
String input = "1,514,230.15";
NumberFormat numberFormat = NumberFormat.getInstance(Locale.US);
double result = numberFormat.parse(input).doubleValue();
System.out.println(result);
String testString = "1514230.15";
double d= Double.parseDouble(testString);
System.out.println(d);
1514230.15
1514230.15
输出:

String testString = "1,514,230.15".replace(",", "");
double d = Double.parseDouble(testString);
System.out.println(d);
String input = "1,514,230.15";
NumberFormat numberFormat = NumberFormat.getInstance(Locale.US);
double result = numberFormat.parse(input).doubleValue();
System.out.println(result);
String testString = "1514230.15";
double d= Double.parseDouble(testString);
System.out.println(d);
1514230.15
1514230.15
说明:

String testString = "1,514,230.15".replace(",", "");
double d = Double.parseDouble(testString);
System.out.println(d);
String input = "1,514,230.15";
NumberFormat numberFormat = NumberFormat.getInstance(Locale.US);
double result = numberFormat.parse(input).doubleValue();
System.out.println(result);
String testString = "1514230.15";
double d= Double.parseDouble(testString);
System.out.println(d);
1514230.15
1514230.15
  • 解决方案1
    中,使用
    replace
    方法替换所有
    ,即
    replace(“,”,”)
  • 解决方案2中使用了
    。此类提供用于格式化和解析数字的接口
  • 解决方案3
    中,从
    testString
    中删除了所有
    ,即
    String testString=“1514230.15”
  • 您应该使用专门用于此类转换的。您的输入字符串符合
    Locale.US
    的数字格式

    import java.text.NumberFormat;
    import java.text.ParseException;
    import java.util.Locale;
    
    public class Main {
        public static void main(String[] args) throws ParseException {
            String input = "1,514,230.15";
            NumberFormat numberFormat = NumberFormat.getInstance(Locale.US);
            double n = numberFormat.parse(input).doubleValue();
            System.out.println(n);
        }
    }
    
    输出:

    String testString = "1,514,230.15".replace(",", "");
    double d = Double.parseDouble(testString);
    System.out.println(d);
    
    String input = "1,514,230.15";
    NumberFormat numberFormat = NumberFormat.getInstance(Locale.US);
    double result = numberFormat.parse(input).doubleValue();
    System.out.println(result);
    
    String testString = "1514230.15";
    double d= Double.parseDouble(testString);
    System.out.println(d);
    
    1514230.15
    
    1514230.15
    

    如果直接执行
    Double.parseDouble
    ,则不能使用逗号,因为在Java源代码中没有将逗号放在Double中,这可能是相关的:(然后可以使用类似
    df.parse(stringRepresentingFormattedDouble.doubleValue()
    )的格式)。值得解释的是,为什么NumberFormat.parse与Double.parseDouble不同:NumberFormat用于人类可读的数字,因为它们将呈现给最终用户,就像原始问题中的字符串一样;parseDouble用于代码格式的数字,即Java代码中出现的数值。此外,您还可以偷偷地复制并将其作为选项之一。无论何时你复制别人的解决方案,都要引用。