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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top