我从用户那里获得输入并逐行读取。然后我使用split方法来标记输入。像这样:
Scanner input=new Scanner(System.in);
String input1=input.nextLine();
String[] tokens=input1.split(" ");
method1(Double.parseDouble(tokens[0]),Double.parseDouble(tokens[1]));
以下是method1
:
public static void method1 (double a, double b) {
System.out.println(a);
System.out.println(b);
}
当我声明3.5和5.3输出时;
3.5
5.3
这里没有问题但如果我声明3,5和5,3我的代码在下面给出了错误;
Exception in thread "main" java.lang.NumberFormatException: For input string: "3,5"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
如何解决此问题?
答案 0 :(得分:6)
使用NumberFormat
,您可以执行以下操作:
NumberFormat f = NumberFormat.getInstance(Locale.FRANCE);
double myNumber = f.parse("3,5").doubleValue();
现在,您可以将myNumber
传递给接受double
值的方法。
使用Locale.FRANCE
时,告诉Java您使用double
代替,
编写.
个数字。
答案 1 :(得分:1)
您可以像这样使用DecimalFormat
:
DecimanFormat df = new DecimalFormat("#.#", DecimalFormatSymbols.getInstance());
Double returnValue = Double.valueOf(df.format(input1));
因此DecimalFormatSymbols.getInstance()
将获得默认语言环境及其正确的符号。
详细了解DecimalFormat
。
答案 2 :(得分:0)
我猜是: 您通过scaner输入的是
3.5 5.3
您已申请
String[] tokens=input1.split(" ");
所以它将你的字符串分成子串,即3.5和5.3 如果你输入
3.5,5.3
这将是成功的,它将编译没有错误..
在您的情况下
input 3,5 5,3
你需要在分割方法中加上“,”,如:
String[] tokens=input1.split(",");
它将与输出一起工作....
3
5 5
3