Arredondamento em Float.parseFloat("999999.99");

Alguem sabe pq quando faço:
Float.parseFloat(“999999.99”); e vou ver o resultado gerado está em 1000000.0
Já tentei usar DecimalFormat e nada…

DecimalFormat decimalFormat = new DecimalFormat("#,###.00");
processo.setValorPedido(Float.parseFloat(decimalFormat.format(numSemPontos)));

Obs: Não quero mudar o BEAN para aceitar double pq eu ia ter um retrabalho muito grande.

Atc.

Deixa eu ver se entendi … vc não quer o arredondamento?

Se for isso vc pode usar a classe BigDecimal

BigDecimal a = new BigDecimal("999999.99"); DecimalFormat format = new DecimalFormat("###,###.##"); System.out.println(format.format(a));

Se eu entendi errado desculpa ai …

:smiley:

Esse é um problema dos floats. Eles foram feitos para ter precisão científica, não monetária. Se os valores que você precisa devem ser precisos, o melhor é realmente usar um long.

Você pode ver essa dica no capítulo 7, item 31, do Effective Java, do Joshua Bloch.

http://java.sun.com/docs/books/effective/chapters.html

silva.fernandes, valeu a ajuda era isso mesmo, mas não funcionou mesmo assim. Pq quando vou fazer:

BigDecimal a = new BigDecimal("999999.99");     
DecimalFormat format = new DecimalFormat("###,###.##");
processo.setValorPedido(Float.parseFloat(format.format(a)));

O valor arredonda de novo.
Já tentei usando:

a.floatValue();

Mas tb arredondou…
Pelo visto vou ter que usar Double mesmo…
Valeu ai ViniGodoy pela ajuda tb…

[quote=leofernandesmo]silva.fernandes, valeu a ajuda era isso mesmo, mas não funcionou mesmo assim. Pq quando vou fazer:

BigDecimal a = new BigDecimal("999999.99");     
DecimalFormat format = new DecimalFormat("###,###.##");
processo.setValorPedido(Float.parseFloat(format.format(a)));

O valor arredonda de novo.
Já tentei usando:

a.floatValue();

Mas tb arredondou…
Pelo visto vou ter que usar Double mesmo…
Valeu ai ViniGodoy pela ajuda tb…
[/quote]

Para aprender eu copiei o código e fiz alguns testes. Engraçado que funcionou o arredondamento

String resultado = "99999.99";

DecimalFormat myformat = new DecimalFormat("#,###.00");   

float valor = Float.parseFloat(resultado);   

String valor_novo = myformat.format(valor);   
JOptionPane.showMessageDialog(null, valor_novo); 

Se puder, nunca use Float ou float, apenas double ou Double.
A precisão do float é muito pequena - 6 casas apenas - e você está tentando usar com 8 casas.

Leo, dá uma olhada pra ver se não é isso q vc ta precisando …

[code]import java.text.DecimalFormat;
import java.util.Locale;

/*

  • By Fabiano Fernandes
    */

public class TesteDecimalFormat {

public static void main(String[] args) {
	Locale locale = Locale.getDefault();
	System.out.println("Verifica as configurações do seu S.O");
	System.out.println("Este Sistema Operacional "
			+ "usa atualmente as seguintes " + "Configuracoes (Default):");
	System.out.println("Pais: " + locale.getDisplayCountry());
	System.out.println("Lingua/Teclado: " + locale.getDisplayLanguage()
			+ " - " + locale.getDisplayName());
	System.out.println("");

	DecimalFormat formatador = new DecimalFormat();
	double valor1 = 235040.39;
	float valor2 = -235040.55f;

	System.out.println("Numeros sem formatacao:");
	System.out.println("Valor 1 : " + valor1);
	System.out.println("Valor 2 : " + valor2);
	System.out.println();
	System.out.println("Numeros utilizando a formatacao Default:");
	System.out.println("Valor 1 : " + formatador.format(valor1));
	System.out.println("Valor 2 : " + formatador.format(valor2));
	System.out.println();
	System.out
			.println("Utilizando o Pattern: R$ 000,000.00;R$(000,000.00)");
	formatador.applyPattern("R$ 000,000.00;R$ (000,000.00)");
	System.out.println("Valor 1 : " + formatador.format(valor1));
	System.out.println("Valor 2 : " + formatador.format(valor2)); //Aqui está entre parenteses pois é um número negativo

	if (args.length > 0) {
		String pattern = "";
		for (int i = 0; i < args.length; i++) {
			pattern += args[i] + " ";
		}
		pattern = pattern.trim();
		System.out.println("Utilizando o Pattern: " + pattern);
		try {
			formatador.applyPattern(pattern);
			System.out.println("Valor 1 : " + formatador.format(valor1));
			System.out.println("Valor 2 : " + formatador.format(valor2));
		} catch (IllegalArgumentException e) {
			System.out.println("ERRO: Pattern invalido.");
			System.out.println(e.getMessage());
		}
	}

}

}
[/code]

Espero q te ajude isso…

Falowww

T+

O que está ultima classe faz, realmente?! não entendi 100%

Att

Por favor, não ressucite tópicos antigos… Este tópico morreu a quase 3 anos…

E sobre a classe: ela demonstra como utilizar as classes de Format, mostrando como é possível montar/alterar os patterns de formatação.