如果我执行以下代码:
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner s = null;
StringBuilder builder = new StringBuilder(64);
String line = "1.1 2.2 3.3";
float fsum = 0.0f;
s = new Scanner(line).useDelimiter(" ");
while (s.hasNextFloat()){
float f = s.nextFloat();
fsum += f;
builder.append(f).append(" ");
}
System.out.println("Floats found: " + builder);
System.out.println("Sum: " + fsum);
s.close();
}
}
我的输出是:
Floats found:
Sum: 0.0
但是,如果我在第"1,1 2,2 3,3"
行中用逗号替换点,那么它确实识别浮点数:
Floats found: 1.1 2.2 3.3
Sum: 6.6000004
我想这是因为我的SO是西班牙语,我们使用逗号代替带小数的点。我想过使用Locale,但是没有Locale.SPANISH。
此外,当我运行它时,它的行为正好相反:
public class StringToFloatTest {
public static void main(String[] args) {
String st = "1,1";
float f = Float.parseFloat(st);
System.out.println(f);
}
}
此代码会产生NumberFormatException
,但如果我使用String st = "1.1"
则会有效。
有人可以解释为什么会发生这种情况吗?如何让扫描仪识别浮点数?
答案 0 :(得分:5)
有人可以解释为什么会发生这种情况
正如您所说,它使用您的默认语言环境。打印Locale.getDefault()
以检查您的默认语言区域。
请注意,Float.parseFloat
不是特定于语言环境。
如何让扫描仪识别浮点数?
致电s.useLocale(Locale.US);
答案 1 :(得分:0)
Java 7 default locale中描述了Java默认语言环境选择过程。
以下是如何在不改变源代码的情况下在外部进行更改: how do I set the default locale for my JVM?