Wie der Umrechnungsfaktor für jede Einheit Umwandlung holen
Frage
Wenn Sie zwischen zwei Einheiten umwandeln, Sie tun es in der Regel über die Unitconverter . Wie soll ich herausfinden, was der Umrechnungsfaktor ist? Zum Beispiel:
public static final Unit<Length> KILOMETRE = METER.times(1000);
public static final Unit<Length> CENTIMETRE = METRE.divide(100);
ich mag den Umrechnungsfaktor programmatisch von den Wandler-Schnittstellen erhalten (das heißt 1000 b / w KILOMETRE und METER oder 1/100 im Fall von Zentimetern bis m)
Ich bin nicht sicher, wie diese Informationen von der Schnittstelle Unitconverter zu holen.
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;
}
}
Lösung
Bearbeiten nach weiterem Code von OP geschrieben:
UnitConverter
ist eine abstrakte Klasse, so dass man daraus ziehen muss einen Konverter für die spezifischen Einheiten, die Sie im Auge haben zu erstellen.
Wenn Sie bereits eine Klasse abgeleitet von UnitConverter
verwenden, müssen Sie es die Schnittstelle, um zu prüfen, ob der Designer dieser Klasse war gut genug, um ein Verfahren, dass die Renditen der Multiplikationsfaktor zu belichten.
Mit Blick auf einige der jscience Klassen abgeleitet von UnitConverter
:
-
MultiplyConverter
hat einegetFactor()
Methode, die den Faktor verwendet wird, kehrt in die Umwandlung. -
AddConverter
hat einegetOffset()
Methode, die die Offset kehrt der Umsetzer fügt bei der Umwandlung. -
RationalConverter
, wenn ich es richtig verstehe, wandelt durch die Multiplikation Wert durch den Quotienten zweier Zahlen - Dividend und Divisor. Die Klasse verfügt über Methoden,getDividend()
undgetDivisor()
zur Rückführung der Dividende und den Divisor, so dass Sie die Teilung durchführen konnte sich der Quotient zu nähern.
Also ich denke, der Code (unten) ist fehlerhaft. Der Faktor ist NICHT der Divisor, wie Sie hier haben -. Es ist der Quotient
RationalConverter rationalConverter = (RationalConverter) unitConverter;
double divisor = rationalConverter.getDivisor().doubleValue();
double dividend = rationalConverter.getDividend().doubleValue();
factor = divisor;