当您在2个实体之间进行转换时,通常可以通过UnitConverter进行转换。我该如何找出转换因子是什么?例如:
public static final Unit<Length> KILOMETRE = METER.times(1000);
public static final Unit<Length> CENTIMETRE = METRE.divide(100);
我想从转换器接口以编程方式获得转换因子(即1000 b / w KILOMETER和METER,或者在CENTIMETER到METER的情况下为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;
}
}
答案 0 :(得分:4)
在OP发布的更多代码后进行编辑:
UnitConverter
是一个抽象类,因此必须从中派生出来为您想到的特定单元创建转换器。
如果您已经在使用从UnitConverter
派生的类,则必须检查它的界面,以查看该类的设计者是否足以公开返回乘法因子的方法。
查看从UnitConverter
派生的一些jscience类:
MultiplyConverter
有getFactor()
方法,可返回转化中使用的因子。 AddConverter
有一个getOffset()
方法,可以返回转换器在转换中添加的偏移量。RationalConverter
,如果我理解正确,则通过将转换后的值乘以两个数字的quotient - 被除数和除数来进行转换。该类有方法getDividend()
和getDivisor()
用于返回被除数和除数,因此您可以自己执行除法以逼近商。所以我认为你的代码(下面)是错误的。这个因素不是除数,就像你在这里一样 - 它是商。
RationalConverter rationalConverter = (RationalConverter) unitConverter;
double divisor = rationalConverter.getDivisor().doubleValue();
double dividend = rationalConverter.getDividend().doubleValue();
factor = divisor;