1

在 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 或 1/100,如果 CENTIMETER 到 METRE)

我不确定如何从 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;
    }
}
4

1 回答 1

4

在 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;
于 2010-11-22T10:54:02.050 回答