如何获取任何单位转换的转换因子

时间:2010-11-22 10:09:30

标签: java jscience jsr-275

当您在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;
    }
}

1 个答案:

答案 0 :(得分:4)

在OP发布的更多代码后进行编辑:

UnitConverter是一个抽象类,因此必须从中派生出来为您想到的特定单元创建转换器。

如果您已经在使用从UnitConverter派生的类,则必须检查它的界面,以查看该类的设计者是否足以公开返回乘法因子的方法。

查看从UnitConverter派生的一些jscience类:

  • MultiplyConvertergetFactor()方法,可返回转化中使用的因子。
  • AddConverter有一个getOffset()方法,可以返回转换器在转换中添加的偏移量。
  • RationalConverter,如果我理解正确,则通过将转换后的值乘以两个数字的quotient - 被除数和除数来进行转换。该类有方法getDividend()getDivisor()用于返回被除数和除数,因此您可以自己执行除法以逼近商。

所以我认为你的代码(下面)是错误的。这个因素不是除数,就像你在这里一样 - 它是商。

RationalConverter rationalConverter = (RationalConverter) unitConverter;
double divisor = rationalConverter.getDivisor().doubleValue();
double dividend = rationalConverter.getDividend().doubleValue();
factor = divisor;