import java.util.Scanner;
import java.util.Locale;
import java.text.NumberFormat;
public class TesteDeFormatoDeNumero {
private Scanner entrada = new Scanner(System.in);
/*
* Método para ler o valor
*/
private String getValor(){
System.out.print("Informe o valor: ");
return entrada.next();
}
/*
* Método para converter o padrão ###.###,## para o padrão ######.## da String
*/
private String formatarPadraoUS(){
String padraoUS_p1 = getValor().replace(".", "");
String padraoUS_p2 = padraoUS_p1.replace(",", ".");
return padraoUS_p2;
}
public static void main(String[] args){
//Instancia da classe TesteDeFormatoDeNumero
TesteDeFormatoDeNumero teste = new TesteDeFormatoDeNumero();
//Obtém o valor Double da String retornada pelo método formatarPadraoUS
Double valorInformado = Double.valueOf(teste.formatarPadraoUS());
System.out.println("Original: " + valorInformado);
/*
* Obtém o valor monetário 'forçando' que se seja do Brasil.
* 1 - format(Double d): formata o valor Double para String;
* 2 - new Locale(String language, String country): instancia uma localização com os
parâmetros de idioma (português) e país Brasil;
* 3 - getCurrencyInstance(Locale locale): retorna o valor formatado na moeda do locale
*/
String valorFormatado = NumberFormat.getCurrencyInstance(new Locale("pt", "BR")).format(valorInformado);
System.out.println("Formatado: " + valorFormatado);
}
}
Bom dia @Albertassi88, pegar a string “110.045.42”, do jeito que está e converter para Double não tem como. Você tem que remover o ponto, mas na hora de exibir você pode devolvê-lo!:
import java.text.NumberFormat;
import java.util.Locale;
public class MyClass {
public static void main(String args[])
throws Exception
{
String num = "540.564.52";
num = num.replaceFirst("[.]","");//540564.52
NumberFormat nf = NumberFormat.getInstance(new Locale("en", "US"));
//Agora tá em Double, posso somar, mutiplica...
double n = nf.parse(num).doubleValue();
//na hora de exibir na tela coloco o ponto novamente
System.out.println(nf.format(n).replace(",","."));
//540.564.42
}
}
@Jelson1 muito boa a sua explicação, mais agora surgiu outra dúvida pois esse valor de 110.045.42 eu estou extraindo ele de um texto e no mesmo texto tem valores como por exemplo 545.42, todos os valores eu estou jogando em um array de double, só que os valores desse tipo 545.42, estão vindo convertidos errados por causa disso aqui: num = num.replaceFirst("[.]","");
Como fazer para receber os valores 110.045.42 e 545.42 convertidos na mesma variável corretamente?
public class MyClass {
public static void main(String args[])
throws Exception
{
String num = "444.564.52";
if(!num.matches("\\d*[.]\\d*")){
num = num.replaceFirst("[.]","");
}
NumberFormat nf = NumberFormat.getInstance(new Locale("en", "Us"));
//Agora tá em Double, posso somar, mutiplica...
double n = nf.parse(num).doubleValue();
//na hora de exibir na tela coloco o ponto novamente
System.out.println(nf.format(n).replace(",","."));
//444.564.42
}
}
Se for realmente só esses dois tipos 444.444.44 e 444.44, você também pode fazer assim: trocando apenas o if da solução acima:
If(num.length()>6){
num = num.replaceFirst("[.]","");
}
Uma dúvida esses números você vai precisar somar ou realizar alguma operação? Se não, porque você não faz um array de string em vez de double!