Как получить коэффициент преобразования для любой единицы измерения
Когда вы конвертируете между двумя сущностями, вы обычно делаете это через UnitConverter. Как мне узнать, что такое коэффициент пересчета? Например:
public static final Unit<Length> KILOMETRE = METER.times(1000);
public static final Unit<Length> CENTIMETRE = METRE.divide(100);
Я хотел бы получить коэффициент преобразования программно из интерфейсов преобразователя (то есть 1000 ч / б КИЛОМЕТР и МЕТР или 1/100 в случае СЕНТИМЕТРА в МЕТР)
Я не уверен, как получить эту информацию из интерфейса 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;
}
}
1 ответ
Отредактируйте после добавления кода, опубликованного OP:
UnitConverter
является абстрактным классом, поэтому нужно создать его для создания конвертера для конкретных единиц, которые вы имеете в виду.
Если вы уже используете класс, полученный из UnitConverter
вам нужно проверить его интерфейс, чтобы увидеть, был ли конструктор этого класса достаточно хорош, чтобы представить метод, который возвращает коэффициент умножения.
Рассматривая некоторые классы jscience, полученные из UnitConverter
:
MultiplyConverter
имеетgetFactor()
метод, который возвращает коэффициент, используемый в преобразовании.AddConverter
имеетgetOffset()
метод, который возвращает смещение, которое конвертер добавляет в преобразование.RationalConverter
если я правильно понимаю, конвертирует путем умножения конвертируемого значения на частное двух чисел - дивиденд и делитель. У класса есть методы,getDividend()
а такжеgetDivisor()
для возврата дивиденда и делителя, чтобы вы могли выполнить деление самостоятельно, чтобы приблизить частное.
Поэтому я думаю, что ваш код (ниже) ошибочен. Фактор НЕ делитель, как у вас здесь - это частное.
RationalConverter rationalConverter = (RationalConverter) unitConverter;
double divisor = rationalConverter.getDivisor().doubleValue();
double dividend = rationalConverter.getDividend().doubleValue();
factor = divisor;