Если я выполнить следующий код:Странное поведение Scanner.nextFloat
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
Я думаю, это потому, что мой СО на испанском языке, и мы используем запятые вместо d ots с десятичными числами. Я думал об использовании 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"
.
Может кто-нибудь объяснить, почему это происходит, и как я могу заставить сканер распознать поплавки с точками?
Принимала вы посмотрите на этот пост? Похоже, что это связано с Locale вашей системы (как вы догадались): http://stackoverflow.com/questions/4708219/weird-behaviour-with-scannernextfloat?rq=1 – Julien