Pero has usado "getDecimalSeparator", para saber cual es?.
Es que una cosa es que tu creas que es tal o cual y otra el que realmente se usa...
todo esto está relacionaco con "Locale".
El caso es que la documentación es muy específica y clara...
public float nextFloat()
Scans the next token of the input as a float. This method will throw InputMismatchException if the next token cannot be translated into a valid float value as described below. If the translation is successful, the scanner advances past the input that matched.
Los modos por los que no pueda ser parseado en un float, es que no los delimitadores no sean los correctos (al margen de la entrada tenga valores no numéricos o esté vacía o se alcance el final), o esté fuera de rango por el tipo... vamos me inclino por el fallo en los separadores si insistes en que has entrado "2.02" ó "2,02" ó "2'02"...
public class InputMismatchException
extends NoSuchElementException
Thrown by a Scanner to indicate that the token retrieved does not match the pattern for the expected type, or that the token is out of range for the expected type.
El caso es que sin saber el locale que tienes indicado ni los separadores no se puede adivinar exactamente el problema. El genérico es lo que te he señalado.
prueba el siguiente código y dime si te funciona, y espero que esto solvente tus dudas...
string valor = "9.3 * 3.0 vaya calor";
string resultado = valor + "= 27.9";
//lo tomamos de un string, en vez del teclado, para asegurarme que el error no esté en lo que entres...
Scanner scanKb = new Scanner(resultado);
scanKb.
useLocale(Locale.
US); // el de USA que usan punto...
// Ahora observa que como la entrada está 'sucia'... debemos ir saltando...
while (scanKb.hasNext()) {
scanKb.next(); //obtenemos un token... (el separador por defecto de tokens es el espacio).
if (scanKb.hasNextFloat()) { //si no puede ser parseado como un número flotante, pasamos por alto...
System.
out.
println(scanKb.
nextFloat()); }
}
scanKb.close();
Y debería escupir estos valores:9.3
3.0
27.9