java 默认区域设置为 en_US,它使用“,”表示十进制数
java default Locale is en_US, and it use "," for decimal number
我有这个例子:
System.out.println(Locale.getDefault());
int count = 0;
double sum = 0.0;
FileWriter fout = new FileWriter("test.txt");
fout.write("2 3,4 5 6 7,4 9,1 10,5 done");
fout.close();
FileReader fin = new FileReader("test.txt");
Scanner src = new Scanner(fin);
// Read and sum numbers.
while (src.hasNext()) {
if (src.hasNextDouble()) {
sum += src.nextDouble();
count++;
} else {
String str = src.next();
if (str.equals("done"))
break;
else {
System.out.println("File format error.");
}
}
}
src.close();
System.out.println("Average is " + sum / count);
输出为:
en_US
平均值为 6.2
我的问题是为什么 java 使用“,”而不是“。”对于十进制数,我在 Eng Windows??因为当我使用这条线时
fout.write("2 3.4 5 6 7.4 9.1 10.5 done");
我得到 4:文件格式错误。 这意味着 java 使用“,”而不是“。”
问题是 Scanner
可以有自己的语言环境,在您的情况下,它似乎不同于 Locale.getDefault()
.
返回的 JVM 默认语言环境
要查看您的 Scanner
使用的语言环境,您可以调用 src.locale()
.
要设置语言环境,您可以使用 src.useLocale(Locale.US);
试试这段代码,看看它打印了什么:
public static void main(String[] args) throws Exception {
System.out.println("Default locale: " + Locale.getDefault());
int count = 0;
double sum = 0.0;
FileWriter fout = new FileWriter("test.txt");
// Character used for the decimal point is '.'
fout.write("2 3.4 5 6 7.4 9.1 10.5 done");
fout.close();
FileReader fin = new FileReader("test.txt");
Scanner src = new Scanner(fin);
// Setting locale of Scanner
System.out.println("Scanner locale before resetting to Locale.US: " + src.locale());
src.useLocale(Locale.US);
System.out.println("Scanner locale after resetting: " + src.locale());
// Read and sum numbers.
while (src.hasNext()) {
if (src.hasNextDouble()) {
sum += src.nextDouble();
count++;
} else {
String str = src.next();
if (str.equals("done"))
break;
else {
System.out.println("File format error.");
}
}
}
src.close();
System.out.println("Average is " + sum / count);
}
我有这个例子:
System.out.println(Locale.getDefault());
int count = 0;
double sum = 0.0;
FileWriter fout = new FileWriter("test.txt");
fout.write("2 3,4 5 6 7,4 9,1 10,5 done");
fout.close();
FileReader fin = new FileReader("test.txt");
Scanner src = new Scanner(fin);
// Read and sum numbers.
while (src.hasNext()) {
if (src.hasNextDouble()) {
sum += src.nextDouble();
count++;
} else {
String str = src.next();
if (str.equals("done"))
break;
else {
System.out.println("File format error.");
}
}
}
src.close();
System.out.println("Average is " + sum / count);
输出为: en_US 平均值为 6.2 我的问题是为什么 java 使用“,”而不是“。”对于十进制数,我在 Eng Windows??因为当我使用这条线时
fout.write("2 3.4 5 6 7.4 9.1 10.5 done");
我得到 4:文件格式错误。 这意味着 java 使用“,”而不是“。”
问题是 Scanner
可以有自己的语言环境,在您的情况下,它似乎不同于 Locale.getDefault()
.
要查看您的 Scanner
使用的语言环境,您可以调用 src.locale()
.
要设置语言环境,您可以使用 src.useLocale(Locale.US);
试试这段代码,看看它打印了什么:
public static void main(String[] args) throws Exception {
System.out.println("Default locale: " + Locale.getDefault());
int count = 0;
double sum = 0.0;
FileWriter fout = new FileWriter("test.txt");
// Character used for the decimal point is '.'
fout.write("2 3.4 5 6 7.4 9.1 10.5 done");
fout.close();
FileReader fin = new FileReader("test.txt");
Scanner src = new Scanner(fin);
// Setting locale of Scanner
System.out.println("Scanner locale before resetting to Locale.US: " + src.locale());
src.useLocale(Locale.US);
System.out.println("Scanner locale after resetting: " + src.locale());
// Read and sum numbers.
while (src.hasNext()) {
if (src.hasNextDouble()) {
sum += src.nextDouble();
count++;
} else {
String str = src.next();
if (str.equals("done"))
break;
else {
System.out.println("File format error.");
}
}
}
src.close();
System.out.println("Average is " + sum / count);
}