Problema em um calculo... (2.3841858E-7)?

7 respostas
T

ola

Eis a açao:

dtmEt2Result.setValueAt(String.valueOf(Float.parseFloat((String)dtmEt1Result.getValueAt(i, 0)) - (m * Float.parseFloat((String)dtmEt1Result.getValueAt(k, 0)))  ), i, 0);

Eis o que faz imprimir (pra ver como ele ta funcionando):

M.m(String.valueOf((String)dtmEt1Result.getValueAt(i, 0) + " - "+ "(" + m+" * "+ (String)dtmEt1Result.getValueAt(k, 0)+" ) = "+ dtmEt2Result.getValueAt(i, 0)));

Eis o que imprime:

1.6666666 - (0.9999998 * 1.6666666 ) = 2.3841858E-7

valor1 - (m*valor2)

o m é float tbm

acho que nao é esse o resultado hehe =]
teria que dar = 0

nao consigo achar o problema ¬¬

vlw

7 Respostas

C

Opa,

Voce poderia colocar um pouco mais de codigo para que fique mais “legivel” o seu problema.

T

em outras “palavras”…

String resultado = String.valueOf( (Float)valor1 - ( (Float) valor2 * (Float) valor3) );

resultado que aparece:

1.6666666 - (0.9999998 * 1.6666666 ) = 2.3841858E-7

C

] String resultado = String.valueOf( (Float)valor1 - ( (Float) valor2 * (Float) valor3) );
pq nao faz assim.

Float numero1  = (UmNumero - (SegundoNumero * TerceiroNumero) );
String resultado = numero1.toString;
//String s = "" + numero1;
T

ok
coloquei desse modo que vc disse, mas o resultado continua sendo esse: “2.3841858E-7”; em vez de 0;

Float aij_F = Float.parseFloat((String)dtmEt1.getValueAt(i, j));
Float akj_F = Float.parseFloat((String)dtmEt1.getValueAt(k, j));

//aij = aij- m*akj
Float aij_F_novo = aij_F - (m * akj_F);
String aij_S_novo = aij_F_novo.toString();
C
"tiagolink_":
ok coloquei desse modo que vc disse, mas o resultado continua sendo esse: "2.3841858E-7"; em vez de 0;
Float aij_F = Float.parseFloat((String)dtmEt1.getValueAt(i, j));
Float akj_F = Float.parseFloat((String)dtmEt1.getValueAt(k, j));

//aij = aij- m*akj
Float aij_F_novo = aij_F - (m * akj_F);
String aij_S_novo = aij_F_novo.toString();

O resultado "2.3841858E-7"; está certo, oq acontece é que o float perde precisão facil, logo não fecha (calcula isso na calculadora, não da zero).

"2.3841858E-7" = 0.[telefone removido]...

Para melhorar a precisão use o BigDecimal. No set a scala para menor casas e terá "0".

C

exemplo:

// calculado com o BigDecimal
		BigDecimal bigResult = new BigDecimal(1.6666666).subtract(new BigDecimal(0.9999998)
				.multiply(new BigDecimal(1.6666666)));
		System.out.println(bigResult.setScale(20, BigDecimal.ROUND_HALF_UP));

		// calculado com float (Primitivo)
		System.out.println((1.6666666F - (0.9999998F * 1.6666666F)));
		// calculado com float formatado com Bigdecimal
		System.out.println(new BigDecimal(1.6666666F - (0.9999998F * 1.6666666F)).setScale(20,
				BigDecimal.ROUND_HALF_UP));

		// para conseguir zero arredonde a onde ti interessa. Ex, 2 casas.
		System.out.println(bigResult.setScale(2, BigDecimal.ROUND_HALF_UP));
T

hummmmm

entendi o problema…

mas nao entendi como vc fez… entao fiz de outro modo… funcionou bem

NumberFormat nf = NumberFormat.getInstance(Locale.ENGLISH);
nf.setMaximumFractionDigits(2);

e para imprimir:

float valor = m * valor2;
String result = nf.format(valor);

funcionou perfeitamente.

obrigado ae

Criado 27 de agosto de 2007
Ultima resposta 28 de ago. de 2007
Respostas 7
Participantes 3