Pessoal fui fazer um código aqui usando casa decimal e não funciona.
tipo:
String n1 = “1,99”;
String n2 = “1.000,01”;
double v;
v = Double.parseDouble(n1) + Double.parseDouble(n2); //1002
System.out.println(String.valueOf(v));
Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: “1,99”
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
ALGUÉM SABE O PORQUE NÃO FUNCIONA?
dstori
Agosto 14, 2008, 1:05pm
#2
Os parsers de string para número não utilizam o locale, é fixo, sempre o “.” é separador decimal e a “,” é agrupador de dígitos. Tente “1.99” ou “1,000.10” para ver o resultado.
Não sei se estou errado, mas você está usando String para o formato de seus “números com casas decimais”, talvez uma conversão para o tipo correto ajudaria.
[Edit] É agora que vi o parse, provavelmente deve ser o uso errado dos sinais de separação, como disse o amigo acima
Porque como é sabido por todos, variáveis do tipo ponto flutuante tem as casas decimais separadas por vírgulas e não ponto
Dê uma olhada nesse tópico para resolver o teu problema
http://www.guj.com.br/posts/list/99440.java#535804
Você está usando separadores para os milhares…
O correto seria:
String n1 = "1.99";
String n2 = "1000.01";
double v;
v = Double.parseDouble(n1) + Double.parseDouble(n2); //1002
System.out.println(String.valueOf(v));
v = Double.parseDouble(n1) + Double.parseDouble(n2); //1002
System.out.println(String.valueOf(v));
Pq vc passa pra Double e depois vc ainda imprime o valor da String?
Se é que “String.valueOf()” faz isso…não conheço essa função, mas conheço inglês…
Tente apenas System.out.println(v);
=)
nO BRASIL UTILIZAMOS VALORES ASSIM 1.000,99 OU SEJA USAMOS O “.” PARA SEPARAR O MILHAR E A “,” PARA SEPARAR O DECIMAL.
COMO POSSO TRABALHAR DESSA FORMA?
eros.stein
CONCORDO COM O QUE VC DISSE MAS COMO DISSE, O “.” SEPARA MILHAR E A “,” SEPARA CENTAVOS.
dstori
Agosto 14, 2008, 1:47pm
#8
Use o String.replace antes da conversao, convertendo “.” para “” e “,” para “.”
Obrigado REsolvido!
private String tiraVirgula(String numero) {
try {
numero = numero.replace(".", “”).replace(",", “.”);
} catch (Exception exception) {
}
return numero;
}
NumberFormat nf = NumberFormat.getInstance(new Locale("pt","BR"));
nf.setMinimumFractionDigits(2);
String n1 = "1,99";
String n2 = "1.000,01";
double v;
try {
v = nf.parse(n1).doubleValue() + nf.parse(n2).doubleValue();
System.out.println(nf.format(v));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Assim vc pode usar os numeros do Brasil a vontade =P
[]'s
Gobain
Agosto 14, 2008, 2:30pm
#11
Buenas povo,
Usa um formatter pra trabalhar com os números. Acredito q vc esteja trabalhando com dinheiro, então…
[code]NumberFormat dinheiro = new DecimalFormat("#,###,##0 .00", DecimalFormatSymbols.getInstance(new Locale(“pt”,“br”)));
//daí vc faz:
dinheiro.format(double); // para formatar o double em String
dinheiro.parse(String); // para transformar a String em double[/code]