[英]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.