Come per andare a prendere il fattore di conversione per qualsiasi conversione di unità

StackOverflow https://stackoverflow.com/questions/4244277

  •  27-09-2019
  •  | 
  •  

Domanda

Quando si converte tra 2 soggetti, si fa di solito tramite il UnitConverter . Come devo scoprire ciò che il fattore di conversione è? Ad esempio:

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

I vorrebbe ottenere il fattore di conversione di codice da interfacce del convertitore (cioè 1000 b / w KILOMETER e METER o 1/100 in caso di centimetro METER)

Non sono sicuro di come recuperare queste informazioni dall'interfaccia 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;
    }
}
È stato utile?

Soluzione

Modifica dopo ulteriore codice inserito da OP:

UnitConverter è una classe astratta, per cui bisogna ricavare da esso per creare un convertitore per le unità specifiche che avete in mente.

Se si sta già utilizzando una classe derivata da UnitConverter, si controlla la sua interfaccia per vedere se il progettista di quella classe era abbastanza buono per esporre un metodo che restituisce il fattore di moltiplicazione.

Guardando alcune delle classi jscience derivato da UnitConverter:

  • MultiplyConverter ha un metodo getFactor() che restituisce il fattore viene utilizzato in la conversione.
  • AddConverter ha un metodo getOffset() che restituisce l'offset del convertitore aggiunge nella conversione.
  • RationalConverter , se ho capito bene, i convertiti moltiplicando il valore viene convertito dal quoziente di due numeri - il dividendo e il divisore. La classe ha metodi, getDividend() e getDivisor() per la restituzione del dividendo e il divisore, così da poter eseguire la divisione da soli per approssimare il quoziente.

Quindi penso che il codice (sotto) è in errore. Il fattore non è il divisore, come avete qui -. È il quoziente

RationalConverter rationalConverter = (RationalConverter) unitConverter;
double divisor = rationalConverter.getDivisor().doubleValue();
double dividend = rationalConverter.getDividend().doubleValue();
factor = divisor;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top