Double à la fraction en Java

Donc ce que je suis en train de faire est de convertir le double de nombre rationnel. J'ai vérifier le nombre de chiffres il y a après le point décimal et je veux enregistrer le numéro 123.456 comme 123456 /1000, par exemple.

public Rational(double d){      
    String s = String.valueOf(d);
    int digitsDec = s.length() - 1 - s.indexOf('.');        

    for(int i = 0; i < digitsDec; i++){
        d *= 10;
    }

    System.out.println((int)d); //checking purposes
}   

Cependant, pour le nombre 123.456-je obtenir un arrondi erreur et le résultat est 123455. Je suppose qu'il serait possible de corriger cela avec BigDecimal, mais je ne peux pas le faire fonctionner. Aussi, après avoir calculé ce nombre rationnel, il serait, je voudrais appeler un autre constructeur avec paramètres (int numérateur, int dénominateur) mais je ne peux bien évidemment faire appel au constructeur de la ligne où println est maintenant. Comment dois-je faire cela?

ne serait-il pas plus simple de juste compter l'emplacement de la dot et ensuite supprimer (chaîne de caractères) pour remplacer le dot de la chaîne?
Tu ne peux pas mettre toutes les décimales derrière la dot en face d'elle tout en comptant le nombre de chiffres que vous avez pris? Supprimer la dot, d'analyser tout d'int et de créer un 2ème int à l'aide de 10 fois la quantité de nombres que vous avez pris?
Légèrement hors-sujet, mais vous savez que tout nombre rationnel est un nombre infini de fractions de représentations? Une option pourrait être à la recherche pour le canonique fraction, mais c'est un peu plus compliqué de ce que vous essayez de faire.
Aussi hors sujet, mais vous souhaitez peut-être envisager quelques erreurs d'algorithme. Par exemple, un double ne peut pas représenter 1/10 exactement, mais je ne suis pas sûr si vous voulez représenter le nombre rationnel 0.1000000000000000055511151231257827021181583404541015625. Sinon, comme vous le mentionnez, vous pouvez simplement utiliser BigDecimal.

OriginalL'auteur Neutrino | 2012-12-23