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、または CENTIMETER から METRE の場合は 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;
    }
}
4

1 に答える 1

4

OPによって投稿されたさらにコードの後に​​編集:

UnitConverterは抽象クラスであるため、そこから派生して、考えている特定のユニットのコンバーターを作成する必要があります。

から派生したクラスを既に使用しているUnitConverter場合は、そのインターフェイスをチェックして、そのクラスの設計者が乗算係数を返すメソッドを公開するのに十分かどうかを確認する必要があります。

から派生したいくつかの jscience クラスを見ると、次のようになりますUnitConverter

  • MultiplyConvertergetFactor()変換で使用されている係数を返すメソッドがあります。
  • AddConvertergetOffset()コンバーターが変換で追加するオフセットを返すメソッドがあります。
  • RationalConverter、私が正しく理解していれば、変換される値に2つの数値の(被除数と除数)を掛けて変換します。クラスにはメソッドがgetDividend()ありgetDivisor()、被除数と除数を返すため、商を概算するために自分で除算を実行できます。

だから私はあなたのコード(以下)が間違っていると思います。ここにあるように、因数は除数ではなく、商です。

RationalConverter rationalConverter = (RationalConverter) unitConverter;
double divisor = rationalConverter.getDivisor().doubleValue();
double dividend = rationalConverter.getDividend().doubleValue();
factor = divisor;
于 2010-11-22T10:54:02.050 に答える