当您在两个实体之间进行转换时,通常通过 单位换算器. 。我应该如何找出转换因子是多少?例如:

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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top