la mise en forme du numéro Java localisant
-
21-09-2019 - |
Question
Java utilise période en décimales, par exemple, 1/2 = 0,5
Est-il possible de le faire à la place d'utiliser une virgule, comme dans 1/2 = 0,5? Et de ne pas utiliser des virgules pour des milliers (comme dans cent mille = 100 000), mais l'utilisation d'espace à la place (100 000)?
En ce qui concerne la sortie, je suppose que je pourrais utiliser toutes sortes de fonctions de format de chaîne, mais le problème est entrée (JTable). Certaines colonnes nécessitent double format afin que les utilisateurs doivent entrer quelque chose comme 45,5 et dans ces pièces, ils sont utilisés pour 45,5 :) Merci à l'avance
Mise à jour:
J'ai essayé d'utiliser myTable.setDefaultLocale (Locale.Germany); mais il ne marchait pas. J'ai aussi fait Locale.setDefault (Locale.Germany); @ Fonction principale et il a fait le travail, mais de manière assez stupide: tandis que la cellule est en mode d'édition, vous devez saisir point comme d'habitude, à savoir 45,5 mais après vous appuyez sur Entrée pour confirmer les modifications, il est affiché comme une virgule : 45,5. Je veux dire qu'il utilise des virgules uniquement à des fins d'affichage, mais encore lors de l'édition de son même ol » point.
Est-il possible de le fixer sans écrire modèle de table personnalisé?
La solution
Ainsi, vous voulez essentiellement à convertir localisée représentation String
soi-disant dans un format numérique dans un Number/BigDecimal
et vice-versa?
Il vous propre tutoriel Sun sur la sujet.
Pour localiser votre application Swing, utilisez JComponent#setDefaultLocale()
. Par exemple.
JComponent.setDefaultLocale(Locale.GERMANY);
Autres conseils
Jetez un oeil à Mise en forme et un numéro Parsing pour une Locale :
// Format for CANADA locale Locale locale = Locale.CANADA; String string = NumberFormat.getNumberInstance(locale).format(-1234.56); // -1,234.56 // Format for GERMAN locale locale = Locale.GERMAN; string = NumberFormat.getNumberInstance(locale).format(-1234.56); // -1.234,56 // Format for the default locale string = NumberFormat.getNumberInstance().format(-1234.56); // Parse a GERMAN number try { Number number = NumberFormat.getNumberInstance(locale.GERMAN).parse("-1.234,56"); if (number instanceof Long) { // Long value } else { // Double value } } catch (ParseException e) { }
Pour traiter correctement l'entrée, vous pouvez mettre en œuvre votre propre TableModel et remplacer la méthode setValueAt.