sergiotaborda:
Tem algo muito errado no seu pensamento.
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.
sergiotaborda:
BigDecimal pode ser convertido para double. Vc pode perder precisão, mas em tese um double pode representar qualquer numero.
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.
sergiotaborda:
Se ela não inteligente para usar escala logaritmica, faça-a vc.
É 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.
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);
}
}
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.
[]s
Renan