Por que DecimalFormat("0.00") retorna valores com "," virgula e nao com "."?

o problema e o seguinte estou usando o Decimal Formate para definir que use 2 casas decimais em valores do tipo float

DecimalFormat dec = new DecimalFormat("0.00");
porem quando difito os dados ele me retorno o valor em um JTextField com virgula, o que acontece o travamento do software quando tenta inserir esse valor no banco, ou seja o banco recebe float, e não “0,00” uma string sei la…,
detalhe todos os valores para efetuar o calculo é passado com PONTO.

pq vc não usa o replace ?

tentando implementar isso, porem em quanto a classe decimalformat nao deveria funcionar

Tu está usando Windows?

Nas configurações regionais do Windows, é indicado qual será o separador decimal padrão. O padrão brasileiro é a vírgula, enquanto o ponto serve para os milhares. Tu pode alterar por lá.

O replace serve para substituir um trecho da String por outro.

Abraço

Quando você for inserir no banco, você faz a volta, usando o método parse().

Leia a API que lhe ajudará bastante.

Abraços!

tente isso:

//aqui é sua mascara
DecimalFormat dec = new DecimalFormat("###,###,##0.00");
		
//uma variavel com um valor qualquer
double a = 8.54698;
		
//aqui imprimindo no console a variavel a com formato definido na mascara 
System.out.println(dec.format(a));

sairá isso no console: 8,55

metodo parse() para voltar String? pois e é um float que quero inserir no banco

[quote=marcosharbs]tente isso:

//aqui é sua mascara
DecimalFormat dec = new DecimalFormat("###,###,##0.00");
		
//uma variavel com um valor qualquer
double a = 8.54698;
		
//aqui imprimindo no console a variavel a com formato definido na mascara 
System.out.println(dec.format(a));

sairá isso no console: 8,55
[/quote]

nao deu certo aqui essa mescara companheiro vou tentar as configuraçoes regionais do windows

NumberFormat df = NumberFormat.getCurrencyInstance(Locale.US); ((DecimalFormat)df).applyPattern("0.00"); System.out.println(df.format(seuNumero));

[quote=Rafael Nunes] NumberFormat df = NumberFormat.getCurrencyInstance(Locale.US); ((DecimalFormat)df).applyPattern("0.00"); System.out.println(df.format(seuNumero)); [/quote]

Da pra importar ate a alma dessa classe e mesmo assim da erro de tipo, será que nao ha algo de anormal nesse codigo? ja tentei configurações do windows de alterar “,” para “.” e nada, e tambem fiz testes inserindo os dados manualmente com pontos e Retorno rsrsrs JOptionPane…“DADOS INSERIDOS COM SUCESSO”,

Faz assim:

Tu tens, por exemplo o JTextfield chamado valorTxt com a máscara que adotaste (DecimalFormat valorFormatado).

Tens também a classe, sei lá, Bem, e nela tens os getters e setters, e particularmente o setValor, que tem parâmetro um float.

Para pegar o que escreveste e converter para float para poder inserir no banco, faz assim:

bem.setValor(valorFormatado.parse(valorTxt.getText()).floatValue());

onde ‘bem’ é a instância de Bem.

Abraços!

Isso acontece por causa do Locale padrão do sistema operacional. No caso, como é pt-BR, o separador de casas decimais é a vírgula. Logo, ao chamar o método format, isso acontece. Se você precisar fazer contas com um valor formatado anteriormente, creio que a solução mais simples seja um replace para a casa decimal e um replaceAll para os separadores de milhar.

pois é marco mudei o locale do windows para o ingles funcionaou , apesar de ler sobre as dicas anteriores a aprender um pouquinhho mais… valeu abraços

Não precisava mudar o Locale do Windows. Bastava mudar o locale da aplicação. Inclua isso no início do programa:

Locale.setDefault(Locale.US);

E pronto!

1 curtida

[quote=marcobiscaro2112]Não precisava mudar o Locale do Windows. Bastava mudar o locale da aplicação. Inclua isso no início do programa:

Locale.setDefault(Locale.US);

E pronto![/quote]

valeu marco, pensei mesmo no fato que… imagina ter que configurar as maquinas onde fosse rodar o sistema, que tipo de software é esse que só funciona em maquina de gringo rsrs, coloquei no main() o trecho e acima e …
JOptionPane…DADOS INSERIDOS COM SUCESSO, valeu e abraço.