【问题标题】:Convertion from Speed to (Speed)^-1从速度转换为(速度)^-1
【发布时间】:2019-09-03 22:53:41
【问题描述】:

使用 javax.measure 库,我尝试将 km/h 转换为 min/km。

但是 min/km 不是unit-ri 提议的单位的一部分。

所以我尝试创建自己的单位:MINUTE_BY_KILOMETERS

import javax.measure.Quantity;
import javax.measure.Unit;
import javax.measure.quantity.Length;
import javax.measure.quantity.Speed;

import tec.units.ri.quantity.Quantities;
import tec.units.ri.unit.MetricPrefix;
import tec.units.ri.unit.Units;
    Quantity<Speed> speed = Quantities.getQuantity(10, Units.KILOMETRE_PER_HOUR);
    assertEquals("10 km/h", speed.toString());

    // Conversion m/s
    assertEquals("2.7777800000000004 m/s", speed.to(Units.METRE_PER_SECOND).toString());

    // Conversion min/km
    Unit<Speed> MINUTE_BY_KILOMETERS = Units.MINUTE.divide(MetricPrefix.KILO(Units.METRE)).asType(Speed.class);
    assertEquals("6 min/km", speed.to(MINUTE_BY_KILOMETERS).toString());

但我得到一个例外:

java.lang.ClassCastException: The unit: min/km is not compatible with quantities of type interface javax.measure.quantity.Speed
    at tec.units.ri.AbstractUnit.asType(AbstractUnit.java:274)

我想我必须创建自己的类型,但我不知道如何。

有人可以举个例子吗?

【问题讨论】:

    标签: java units-of-measurement


    【解决方案1】:

    我终于发现有一个 .inverse 函数可以在需要时进行转换。

    所以你必须在代码中保留(距离/时间)指标来进行所有的操作和转换,并在你想要你的值时在末尾添加一个 .inverse():

    Unit<Speed> KILOMETERS_BY_MINUTES = MetricPrefix.KILO(Units.METRE).divide(Units.MINUTE).asType(Speed.class);
    assertEquals("5.9999952000038395 min/km", speed.to(KILOMETERS_BY_MINUTES).inverse().toString());
    

    【讨论】:

      【解决方案2】:

      速度定义为距离除以时间,因此您不能创建Speed 单位“分钟每公里”。但是,您可以创建自己的反向速度测量,这只不过是一个标记界面:

      public interface InverseSpeed extends Quantity<InverseSpeed> {}
      

      然后创建这样一个单元:

      Unit<InverseSpeed> MINUTE_BY_KILOMETERS = 
          Units.MINUTE.divide(MetricPrefix.KILO(Units.METRE)).asType(InverseSpeed.class);
      

      【讨论】:

      • 谢谢,我想它会响应答案。但是,如果我这样做,新单位将与分钟和公里单位完全不相关,这意味着我必须自己管理这个单位中的所有转换,而不是能够使用现有的转换(分钟 -> 小时,公里 - > 米等)。这意味着失去使用库而不是开发自己的转换器的所有兴趣。但是当我正在测试图书馆时,我不确定它是否能做到我所说的。如果你知道这个库,你有任何相关信息吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      相关资源
      最近更新 更多