簡體   English   中英

用逗號代替點接受雙重

[英]Double accepted with comma instead of dot

我無法從我的 bash 終端在我的程序中輸入雙精度值。 下面是我用來弄清楚為什么會發生的代碼。

這是我的測試代碼:

import java.util.*;
public class DoubleTest {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);

        double n = sc.nextDouble();
        System.out.println(n);
    } 
}

使用以下輸入 5,我得到了預期的結果。

user $ java DoubleTest
   5
   5.0

現在到有趣的部分。 我輸入了代碼中聲明的 Double ,這發生了:

user $ java DoubleTest
5.0
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
at DoubleTest.main(DoubleTest.java:6)

當給出 5,0 的值時 - 結果如下:

user $ java DoubleTest
5,0
5.0

所以看起來. (dot) 不起作用,但, (comma) 是。

我已經檢查了我的語言環境,但這不應該是問題。

LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

您的Scanner可能正在使用Denmark Locale ,格式化雙變量而不是美國默認值. .

這是您可以檢查它的方法(我嘗試在本地強制我的掃描儀使用丹麥語言環境,它的行為與您的實驗相同):

Scanner sc = new Scanner(System.in);
System.out.println(sc.locale().getDisplayCountry());

如果這是您的情況,您需要將其設置為使用美國Locale或您想要的任何其他:

Scanner sc = new Scanner(System.in);
sc.useLocale(Locale.US);
System.out.println(sc.locale().getDisplayCountry());

或者,如果您需要同時接受,. 你可以簡單地使用格式化程序。 這是一個使用France作為區域設置的NumberFormat示例,它的格式正確,.

NumberFormat numberFormat = NumberFormat.getInstance(Locale.FRANCE);
double doubleComma = numberFormat.parse("5,0").doubleValue();
double doubleDot = numberFormat.parse("5.0").doubleValue();

在您的代碼中,您將執行以下操作:

public static void main (String[] args) {
    try{
        Scanner sc = new Scanner(System.in);

        NumberFormat numberFormat = NumberFormat.getInstance(Locale.FRANCE);
        double n = numberFormat.parse(sc.next()).doubleValue();
        System.out.println(n);
    } catch (ParseException e) {
        e.printStackTrace();
    }
} 

暫無
暫無

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

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