簡體   English   中英

用逗號作為逗號分隔雙精度十進制分隔符

[英]Parsing double with comma as decimal separator

我從用戶那里獲取輸入並逐行閱讀它,然后使用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)

我該如何解決這個問題?

使用NumberFormat可以執行以下操作:

NumberFormat f = NumberFormat.getInstance(Locale.FRANCE);
double myNumber = f.parse("3,5").doubleValue();

現在,您可以將myNumber傳遞給接受double myNumber值的方法。

當使用Locale.FRANCE ,你告訴Java的,你寫的double數字用,而不是.

您可以這樣使用DecimalFormat

DecimanFormat df = new DecimalFormat("#.#", DecimalFormatSymbols.getInstance());
Double returnValue = Double.valueOf(df.format(input1));

因此DecimalFormatSymbols.getInstance()將獲取默認語言環境及其正確的符號。

閱讀有關DecimalFormat更多信息。

我猜是:您通過掃描儀輸入的是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM