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

Java 如何获取任何单位转换的转换因子,java,jscience,jsr-275,Java,Jscience,Jsr 275,在两个实体之间转换时,通常通过。我应该如何确定转换系数是多少?例如: public static final Unit<Length> KILOMETRE = METER.times(1000); public static final Unit<Length> CENTIMETRE = METRE.divide(100); 公共静态最终单位公里=米乘以(1000); 公共静态最终单位厘米=米除以(100); 我希望从转换器接口以编程方式获得转换系数(即1000 b/

在两个实体之间转换时,通常通过。我应该如何确定转换系数是多少?例如:

public static final Unit<Length> KILOMETRE = METER.times(1000);
public static final Unit<Length> CENTIMETRE = METRE.divide(100);
公共静态最终单位公里=米乘以(1000);
公共静态最终单位厘米=米除以(100);
我希望从转换器接口以编程方式获得转换系数(即1000 b/w千米和米,或厘米到米的情况下为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;
    }
}
protected double getConvFactor(单位从,单位到){
双因子=-1;
UnitConverter UnitConverter=从.getConverterTo(到);
if(多路转换器的单位转换器实例){
多路转换器多路转换器=(多路转换器)单位转换器;
factor=multiplyConverter.getFactor();
}else if(添加转换器的unitConverter实例){
AddConverter AddConverter=(AddConverter)unitConverter;
factor=addConverter.getOffset();
}else if(定量转换器的单位转换器实例){
定量转换器定量转换器=(定量转换器)单位转换器;
double divisior=rationalConverter.getdivisior().doubleValue();
double divident=rationalConverter.getdivident().doubleValue();
因子=除数;
}
}

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

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

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

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

  • 具有一个
    getFactor()
    方法,该方法返回转换中使用的因子
  • 具有一个
    getOffset()
    方法,该方法返回转换器在转换中添加的偏移量
  • ,如果我理解正确的话,通过将被转换的值乘以两个数的乘积进行转换-被除数和除数。该类具有返回被除数和除数的方法,
    getdivident()
    getdivisior()
    ,因此您可以自己执行除法以近似商
所以我认为你的代码(下面)是错误的。因子不是除数,就像你在这里看到的,它是商

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

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

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

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

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

  • 具有一个
    getFactor()
    方法,该方法返回转换中使用的因子
  • 具有一个
    getOffset()
    方法,该方法返回转换器在转换中添加的偏移量
  • ,如果我理解正确的话,通过将被转换的值乘以两个数的乘积进行转换-被除数和除数。该类具有返回被除数和除数的方法,
    getdivident()
    getdivisior()
    ,因此您可以自己执行除法以近似商
所以我认为你的代码(下面)是错误的。因子不是除数,就像你在这里看到的,它是商

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

有没有理由使用-ve-voteis有没有理由使用-ve-vote大多数单位似乎都在使用理性变换器,它有一个除数和一个除数。在这种情况下,没有明确的方法来确定转换因子,因为根据左侧单位是什么,转换因子从除数或被除数中提取。在这种情况下,不确定如何清楚地识别,其余的转换器似乎没问题。大多数单元似乎使用了理性转换器,它有一个除数和一个除数。在这种情况下,没有明确的方法来确定转换因子,因为根据左侧单位是什么,转换因子从除数或被除数中提取。不知道如何在这种情况下清楚地识别,其余的转换器似乎没问题。