有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从速度转换为(速度)^1

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

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

所以我试着创建我自己的单位:分乘公里

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)

我想我必须创建我自己的类型,但我没有发现如何创建

有人能举个例子吗


共 (2) 个答案

  1. # 1 楼答案

    我终于发现有一个。逆函数,以便在需要时进行转换

    因此,您必须在代码中保留(距离/时间)度量来执行所有操作和转换,并添加。当您需要值时,在末尾使用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. # 2 楼答案

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

    public interface InverseSpeed extends Quantity<InverseSpeed> {}
    

    然后创建这样一个单元:

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