Arredondamento em Float.parseFloat("999999.99");

8 respostas
leofernandesmo

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.

8 Respostas

silva.fernandes

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:

ViniGodoy

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

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…

gbmesso

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…

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);
T

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.

silva.fernandes

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

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());
			}
		}

	}

}

Espero q te ajude isso..

Falowww

T+

rafaelob

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

Att

C

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.

Criado 15 de dezembro de 2006
Ultima resposta 20 de nov. de 2009
Respostas 8
Participantes 7