Question

Lors de la conversion entre les 2 entités, vous le faites habituellement via le UnitConverter . Comment dois-je savoir ce que le facteur de conversion est? Par exemple:

public static final Unit<Length> KILOMETRE = METER.times(1000);
public static final Unit<Length> CENTIMETRE = METRE.divide(100);

Je souhaite obtenir le facteur de conversion par programmation à partir des interfaces de conversion (par exemple 1 000 b / w KILOMETER et METER ou 1/100 en cas de CENTIMETER à METRE)

Je ne sais pas comment récupérer ces informations à partir de l'interface UnitConverter.

EDIT1

protected double getConvFactor(Unit<Length> from, Unit<Length> to) {
    double factor = -1;

    UnitConverter unitConverter = from.getConverterTo(to);

    if (unitConverter instanceof MultiplyConverter) {
        MultiplyConverter multiplyConverter = (MultiplyConverter) unitConverter;
        factor = multiplyConverter.getFactor();
    } else if (unitConverter instanceof AddConverter) {
        AddConverter addConverter = (AddConverter) unitConverter;
        factor = addConverter.getOffset();
    } else if (unitConverter instanceof RationalConverter) {
        RationalConverter rationalConverter = (RationalConverter) unitConverter;
        double divisor = rationalConverter.getDivisor().doubleValue();
        double dividend = rationalConverter.getDividend().doubleValue();
        factor = divisor;
    }
}
Était-ce utile?

La solution

Modifier après autre code affiché par OP:

UnitConverter est une classe abstraite, donc il faut en tirer pour créer un convertisseur pour les unités spécifiques que vous avez à l'esprit.

Si vous utilisez déjà une classe dérivée de UnitConverter, vous devrez vérifier l'interface de voir si le concepteur de cette classe était assez bon pour exposer une méthode qui retourne le facteur de multiplication.

En regardant certaines des classes de jscience dérivée de UnitConverter:

  • MultiplyConverter a une méthode de getFactor() qui renvoie le facteur utilisé dans La conversion.
  • AddConverter a une méthode de getOffset() qui renvoie le décalage du convertisseur ajoute dans la conversion.
  • RationalConverter , si je comprends bien, convertis en multipliant le la valeur convertie par le quotient de deux nombres - le dividende et le diviseur. La classe a des méthodes, getDividend() et getDivisor() pour le retour du dividende et le diviseur, de sorte que vous pouvez effectuer la division vous rapprochant le quotient.

Je pense donc que votre code (ci-dessous) est dans l'erreur. Le facteur n'est pas le diviseur, comme ici -. C'est le quotient

RationalConverter rationalConverter = (RationalConverter) unitConverter;
double divisor = rationalConverter.getDivisor().doubleValue();
double dividend = rationalConverter.getDividend().doubleValue();
factor = divisor;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top