在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代码中出现的数值。此外,您还可以偷偷地复制并将其作为选项之一。无论何时你复制别人的解决方案,都要引用。