2010-11-22 16 views
1

2つのエンティティ間で変換を行う場合、通常はUnitConverterで行います。どのように換算係数がわかるのでしょうか?例えば:単位変換の換算係数を取得する方法

public static final Unit<Length> KILOMETRE = METER.times(1000); 
public static final Unit<Length> CENTIMETRE = METRE.divide(100); 

私はないですコンバータインターフェース(すなわち、千B/Wキロメーター又は計器へセンチメートル場合1/100)からプログラム

を変換係数を取得したいと思いUnitConverterインターフェイスからこの情報を取得する方法を確認してください。 OPにより投稿され、さらにコードの後

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; 
    } 
} 
+0

-v投票の理由があります。 – Sam

答えて

4

編集:1あなたが持っている特定のユニットのためのコンバータを作成し、そこから派生しなければなりませんので、

UnitConverterは、抽象クラスであります念頭に置いて。

UnitConverterから派生したクラスを既に使用している場合は、そのクラスのデザイナーがその乗算係数を返すメソッドを公開するのに十分かどうかを確認する必要があります。 UnitConverterに由来jscienceクラスのいくつかを見てみる

  • MultiplyConverterは、変換に使用される因子を返しgetFactor()方法を有しています。
  • AddConverterは、コンバータが変換で追加するオフセットを返す方法を持っています(getOffset())。
  • RationalConverter私が正しく理解していれば、quotientで変換された値に被除数と除数の2つの数を掛けて変換します。クラスには、被除数と除数を返すメソッドgetDividend()getDivisor()があります。したがって、商を近似するために除算を自分で実行することができます。

あなたのコード(下記)が間違っていると思います。あなたがここにあるように、因子は除数ではありません - それは商です。

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

ほとんどのユニットはRationalConverterを使用しているようですが、除数と被除数があります。この場合、変換係数を識別する明確な方法はありません。左側のユニットが何であるかに応じて、変換係数が除数または被除数から選択されるからです。このケースで明確に識別する方法がわからない場合、コンバータの残りの部分は正常と思われます。 – Sam

+0

説明するためにいくつかのコードを投稿できますか? – razlebe

+0

質問の一部としてコードを追加しました – Sam

関連する問題