Formatação de número de localização Java
-
21-09-2019 - |
Pergunta
Java usa ponto final em decimais, por ex.1/2 = 0,5
Existe alguma maneira de usar vírgula, como em 1/2 = 0,5?E não usar vírgula para milhares (como em cem mil = 100.000), mas sim usar espaço (100.000)?
Quando se trata de saída, suponho que poderia usar todos os tipos de funções de formato de string, mas o problema é a entrada (JTable).Algumas colunas requerem formato duplo, então os usuários devem inserir algo como 45,5 e nessas partes eles estão acostumados com 45,5 :) Agradecemos antecipadamente
Atualizar:
Tentei usar myTable.setDefaultLocale(Locale.Germany);mas não funcionou.Eu também fiz Locale.setDefault(Locale.Germany);@ função principal e funcionou, mas de uma forma bastante boba:enquanto a célula estiver no modo de edição, você deve inserir o ponto normalmente, ou seja,45,5 mas depois você pressiona Enter para confirmar as alterações, ele é exibido como vírgula:45,5.Quero dizer, ele usa vírgula apenas para fins de exibição, mas ao editar ainda é o mesmo ponto.
Há algum modo de consertar isso sem escrevendo modelo de tabela personalizado?
Solução
Assim, você basicamente quer converter a localizado String
representação supostamente em formato numérico em um Number/BigDecimal
e vice versa?
Aí você tem o java.text.DecimalFormat
para.Para saber mais, consulte Tutorial próprio da Sun sobre o tema.
Para localizar seu aplicativo Swing, use JComponent#setDefaultLocale()
.Por exemplo.
JComponent.setDefaultLocale(Locale.GERMANY);
Outras dicas
Dê uma olhada Formatando e analisando um número para uma localidade:
// 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) { }
Para processar a entrada corretamente, você pode implementar seu próprio TableModel e substituir o método setValueAt.