题
当您在两个实体之间进行转换时,通常通过 单位换算器. 。我应该如何找出转换因子是多少?例如:
public static final Unit<Length> KILOMETRE = METER.times(1000);
public static final Unit<Length> CENTIMETRE = METRE.divide(100);
我想以编程方式从转换器接口获取转换因子(即1000 黑白公里和米或 1/100(厘米到米)
我不确定如何从 UnitConverter 接口获取此信息。
编辑1
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;
}
}
解决方案
在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;
不隶属于 StackOverflow