Pregunta

Al convertir entre 2 entidades, por lo general lo hace a través de la UnitConverter . ¿Cómo debo averiguar cuál es el factor de conversión es? Por ejemplo:

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

I le gustaría obtener el factor de conversión mediante programación de las interfaces del convertidor (es decir, 1.000 b / w KILÓMETRO y METER o 1/100 en caso de centímetro hasta METER)

No estoy seguro de cómo para ir a buscar esta información de la interfaz 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;
    }
}
¿Fue útil?

Solución

Editar después de un nuevo código OP Publicado por:

UnitConverter es una clase abstracta, por lo que uno debe derivar de ella para crear un convertidor para las unidades específicas que tiene en mente.

Si usted ya está usando una clase derivada de UnitConverter, usted tiene que comprobar su interfaz para ver si el diseñador de esa clase era lo suficientemente bueno para exponer un método que devuelve el factor de multiplicación.

Buscando en algunas de las clases jscience deriva de UnitConverter:

  • MultiplyConverter tiene un método getFactor() que devuelve el factor que se utiliza en la conversión.
  • AddConverter ha getOffset() un método que devuelve el desplazamiento añade el convertidor en la conversión.
  • RationalConverter , si he entendido bien, convertidos por la multiplicación de la valor que se convierte por el cociente de dos números - el dividendo y el divisor. La clase tiene métodos, getDividend() y getDivisor() para devolver el dividendo y el divisor, por lo que podría llevar a cabo la división de sí mismo para aproximar el cociente.

Así que creo que el código (abajo) está en un error. El factor no es el divisor, ya que tienes aquí -. Que es el cociente

RationalConverter rationalConverter = (RationalConverter) unitConverter;
double divisor = rationalConverter.getDivisor().doubleValue();
double dividend = rationalConverter.getDividend().doubleValue();
factor = divisor;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top