Pessoal, estou com a seguinte dúvida. (Coloquei a dúvida no Java Básico, mas ninguém respondeu, por isso estou tentando aqui)
Estava procurando uma classe para formatar uma variável double que estava sendo retornada com muitas casas depois da vírgula.
Encontrei uma classe, a DecimalFormat, que resolveu a questão para mim. Porém, agora tenho outro problema. Como fazer para que quando eu entre um valor pelo teclado, e digite por exemplo 2,50, esta classe entenda, pois ela só está entendendo quando eu digito 2.50. Alguém poderia me ajudar? Já cacei isso no google e não encontro…
Segue o código:
[code]import java.text.DecimalFormat;
import javax.swing.JOptionPane;
public class FormatoDecimalSimples {
public static void main(String[] args) {
double numero=0;
String novonumero;
numero = Double.parseDouble(JOptionPane.showInputDialog("Qual o numero?"));
//DecimalFormat df = new DecimalFormat("#,###.00");
DecimalFormat df = new DecimalFormat("#,##0.00");
novonumero = df.format(numero);
System.out.println(novonumero);
}
}
[/code]
Double.parseDouble exige que os números estejam em notação Java (ou seja, “.” para a vírgula decimal, sem separadores de milhares)
DecimalFormat.parse() faz o que você quer. Ele retorna um Number, não um double, então você precisa usar .doubleValue() para converter o Number para um double.
Achei um código, que transforma de CE para UK, e coincidentemente seria o inverso o que eu precisava, desde que não utiliza-se o BR… Mas tentei adaptar o código e a conversão não foi realizada… Busquei o pattern PT-BR, entrei com um valor 1,123.45 e o valor que saiu foi no padrão 1,123.45… Pode me ajudar? (Detalhe: Minha máquina é um MAC e está em inglês, porém eu já fui nas configurações do numbers and currency das preferências e coloquei como deveria ser em Português-Brasil, mas não me lembro de ter reiniciado a máquina, não sei se tem a ver)
Segue o código e o retorno do console:
[code]import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.Locale;
public class DecimalFormatParse {
/**
* @param args
*/
public static void main(String[] args) {
try {
// output current locale we are running under (this happens to be "nl_BE")
System.out.println( "Current Locale is " + Locale.getDefault().toString() );
// number in Central European Format with a format string specified in UK format
String numberUK = "1.234567"; // 1,234567
//String formatUK = "###,##0.000";
String formatBR = "#,##0.###";
// do the format
//DecimalFormat formatterUK = new DecimalFormat( formatUK );
DecimalFormat formatterBR = new DecimalFormat( formatBR );
// Double valCEWithUKFormat = formatterBR.parse( numberUK ).doubleValue();
Double valUKWithBRFormat = formatterBR.parse( numberUK ).doubleValue();
// I want the number to DPs in the format string!!!
System.out.println( "UK Value " + numberUK + " in BR format (" + formatBR + ") is "
+ valUKWithBRFormat );
} catch( ParseException ex ) {
System.out.println("Cannot parse number");
}
}
}
[/code]
Retorno do console:
Current Locale is en_US
UK Value 1.234567 in BR format (#,##0.###) is 1.234567