Bonjour,
Peut être pas la rubrique ad-hoc, j'ai longtemps hésité entre ici et swing, mais cela relève quand même avant tout du texte.
J'ai un petit problème de conversion d'une String en float.
Au départ j'utilisais l'instruction suivante :
où echel est un float déclaré plus haut, formatNombre un NumberFormat obtenu grâce à la "Locale" utilisée (pas forcément celle par défaut sur le système mais celle sélectionnée par l'utilisateur), et s une String récupérée sur un JTextField.
Code : Sélectionner tout - Visualiser dans une fenêtre à part echel=(formatNombre.parse(s)).floatValue();
L'intérêt est que avec une Locale en_US lorsque je tape
1,236.52
j'ai bien le nombre 1236 en partie entière et 52 en partie décimale
avec la Locale fr_FR j'ai 1 en partie entière et 236 en partie décimale (et le 52 n'est pas pris en compte.)
Mais si je tape 1y236 ('y' ou n'importe quoi d'autre d'ailleurs), j'obtiens 1. Il ne lève pas de NumberFormatException (par contre si je tape "y" directement il lève bien une exception). D'ailleurs si je tape 1.236,52 j'obtiens seulement 1 (alors qu'il me semblait bien que le point correspond au séparateur de millier).
le fait de pouvoir introduire un caractère quelconque sans lever d'erreur est-il un comportement normal du NumberFormat ?
J'ai donc essayé
mais du coup je perd la possibilité d'écrire les nombres correctement en fonction de la Locale et si je tape 1,236 je lève une Exception, ce qui pour un utilisateur francophone n'est pas logique (et pour un américain non plus puisque pour lui aussi cette écriture est correcte et correspond 1236).
Code : Sélectionner tout - Visualiser dans une fenêtre à part echel=(Float.valueOf(s)).floatValue();
Y-a-t-il
- soit moyen de paramétrer le NumberFormat pour qu'il lève une Exception lorsqu'il rencontre un caractère ?
- voir sur le Float.valueOf(s) pour reconnaitre correctement les points et les virgules en fonction de Locale (mais j'y crois déjà moins)
- soit filtrer directement sur le JTextFiled pour ne pas tenir compte des caractères autre qu'un nombre un point ou une virgule, mais il me reste le problème du point qui ne passe pas en français et je perd la possibilité de passer d'autres formats de nombre sans les connaitre a priori (ben oui si un jour je veux traduire mon programme en chinois?).
merci pour votre aide,
bon code,
kerinel
Partager