【问题标题】:How to fetch the conversion factor for any unit conversion如何获取任何单位转换的转换因子
【发布时间】:2011-05-13 18:10:21
【问题描述】:

当您在 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 界面获取此信息。

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

【问题讨论】:

  • -ve 投票是否有原因

标签: java jscience jsr-275


【解决方案1】:

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

UnitConverter 是一个抽象类,因此必须从它派生才能为您想到的特定单位创建转换器。

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

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

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

所以我认为您的代码(如下)有误。因子不是除数,就像您在这里所说的那样 - 它是商。

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

【讨论】:

  • 大多数单位似乎都在使用 RationalConverter,它有一个除数和一个除数。在这种情况下,没有明确的方法来识别转换因子,因为根据左侧的 Unit 是什么,转换因子会从除数或被除数中获取。在这种情况下不知道如何清楚地识别,其余的转换器似乎都很好。
猜你喜欢
  • 2017-12-10
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 2013-07-03
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多