Comment aller chercher le facteur de conversion pour une conversion d'unité
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;
}
}
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 degetFactor()
qui renvoie le facteur utilisé dans La conversion. -
AddConverter
a une méthode degetOffset()
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()
etgetDivisor()
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;