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;
    }
}
War es hilfreich?

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 eine getFactor() Methode, die den Faktor verwendet wird, kehrt in die Umwandlung.
  • AddConverter hat eine getOffset() 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() und getDivisor() 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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top