[quote=renanc][quote=sergiotaborda]
Tem algo muito errado no seu pensamento.
[/quote]
sergiotaborda, sequer o conheço, mas sei que se está aqui é porque está querendo ajudar. No entanto, ainda não consegui entender onde está a falha no meu pensamento. Mas isso realmente não vem ao caso. Sei que a falha é minha em não conseguir te explicar o que para mim está bem claro.
Aí é que está a questão. Essas tabelas e gráficos que estou fazendo são para minha tese de doutorado e, nesse caso, precisão é tudo. O código escrito por baixo dessa camada Java, é todo escrito em Fortran para você ter ideia.
Quando estamos lidando com números grandes, ok.
Mas quando lidamos com números muito pequenos, aí complica.
doubles estão beeeem longe de poder “representar qualquer número”, como você disse, mesmo em tese.
Como você bem sabe, são infintos números entre 0 e 1, mas apenas um pequeno conjunto de bits para tentar representá-los.
É o que estou tentando fazer. Escrevi um trecho de código aqui rapidinho para mostrar o meu problema com a conversão de BigDecimal’s.
[code]import java.math.BigDecimal;
public class Teste {
public static void main(String args[]) {
//Ok. Dá para eu me virar tranquilo com isso.
BigDecimal trinity = new BigDecimal(“9.18345E+18”);
double neo = trinity.doubleValue();
System.out.println("\n BigDecimal value :" + trinity);
System.out.format(“method generating result: %f%n”, neo);
//Aqui está meu problema
trinity = new BigDecimal(“9.18765E-10”);
neo = trinity.doubleValue();
System.out.println("\n BigDecimal value :" + trinity);
System.out.format(“method generating result: %f%n”, neo);
}
}[/code]
Saída:
BigDecimal value :9.18345E+18
method generating result: 9183450000000000000,000000
BigDecimal value :9.18765E-10
method generating result: 0,000000
Ou seja, se todos os números pequenos forem mapeados para zero, não tem como eu plotar. Por isso, pensei naquela alternativa que propus.
Espero que com esse exemplo, tenha ficado mais claro o meu problema.
Se você, ou mais alguém, souber como posso “consertar” essa conversão, ou como fazer o que eu estava planejando inicialmente (mudar todos para a mesma base), eu agradeceria bastante.
[/quote]
Vou deixar que outro alguém explique melhor, mas o ponto é:
- Entenda que o numero é sempre o mesmo
- a formatação só mostra o que vc madou mostrar e não mostra o numero verdadeiro (é por isso que aparecem só zeros, não é porque o numero é zero, é porque essas são as primeiras seis casas)
- para formatação verdadeira use DecimalFormat
- É bom explicar qual a lib de gráfico que vc está usando e qual é o código que está usando.
Experimente este código:
BigDecimal trinity = new BigDecimal("9.18765E-10");
double neo = trinity.doubleValue();
System.out.println("\n BigDecimal value :" + trinity);
DecimalFormat f = new DecimalFormat("0.###E00");
System.out.format("method generating result: %f%n", neo);
System.out.println("method generating result using format:" + f.format(neo));