用逗号作为小数分隔符解析double

时间:2014-03-17 10:13:27

标签: java number-formatting

我从用户那里获得输入并逐行读取。然后我使用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)

如何解决此问题?

3 个答案:

答案 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