Converter -4.440892098500626E-16 para -4.44

9 respostas
luceliopv

Boa tarde
Já tentei diversos métodos para converter esse double que vem do banco de dados e não consegui ainda,
na maioria das tentativas ele converte para 0. Já tentei criando um bigdecimal e usando setScale e ele
retorna 0, já tentei assim e tbm retorna zero:

double x =  ( Math.round( (valorDouble* 100.0) ) ) / 100.0;

Alguma dica ai?

9 Respostas

zoren

Forçar a transformação pra int não funciona??

ou qualquer outro tipo que satisfaça??

esse numero é uma representação não lembro o nome de um número muito maior

luceliopv

ba cara, já nem sei mais o que pensar hehehehehe
ja tentei de todas as formas que achei na internet e nenhuma consegue :frowning:
truncando pra duas casas já taria bom sabe

mario.fts

também, vc já parou pra ver o número que vc ta arredondando?

Double d = Double.parseDouble("-4.440892098500626E-16");
DecimalFormat df = new DecimalFormat("##0.##################################");
System.out.println(df.format(d));

isso imprime -0,0000000000000004440892098500626.

acho que ao invés de dividir, vc vai ter é que multiplicar por 10 algumas vezes (ou 10 elevado a 16, talvez…kkkk).

mario.fts

Double d = Double.parseDouble("-4.440892098500626E-16"); double dez = Math.pow(10, 16); DecimalFormat df = new DecimalFormat("##0.##"); System.out.println(df.format(d * dez));

luceliopv

hum,
quer dizer que -0,0000000000000004440892098500626 é o -4.440892098500626E-16 ???
Se for tá beleza, então ele estava certo em me retornar 0.

Foxlol

No caso acima você nem sempre vai saber a potência, a não ser que você extraia ela também com um substring.

Mas, segue um outro workaround:

Double valor = -4.440892098500626E-16;
DecimalFormat df = new DecimalFormat("0.##E0");
		
String valorFormatado = df.format(valor);
String valorExtraido = valorFormatado.substring(0, valorFormatado.indexOf("E"));
Double valorDesejado = Double.valueOf(valorExtraido);

Flw

pablosaraiva

O número está em notação científica.

Significa -4.440892098500626 * 10^-16.

Ao contrário do que o Foxlol disse, dá pra saber exatamente a potência. É -16.

Foxlol

pablosaraiva:
O número está em notação científica.

Significa -4.440892098500626 * 10^-16.

Ao contrário do que o Foxlol disse, dá pra saber exatamente a potência. É -16.

Eu não disse que não da pra saber a potência. Eu disse que ele não saberia sem fazer um substring no número.

E que para aplicar o exemplo do amigo mario.fts ele precisaria sempre fazer essa busca para utilizar no Math.pow().

Flw

luceliopv

valeu pessoal, obrigado pela ajuda

Criado 17 de novembro de 2009
Ultima resposta 17 de nov. de 2009
Respostas 9
Participantes 5