【问题标题】:US/Imperial units with Java's Units of Measurement API使用 Java 的测量单位 API 的美制/英制单位
【发布时间】:2020-11-21 12:55:09
【问题描述】:
我只在 Java Units of Measurement 标准的 Indriya 2.0.4 reference implementation 中看到公制单位。当然,其他人也想用英尺、英寸和英里来工作,但我找不到任何相关信息。谁能告诉我我在这里缺少什么?
我可以Quantity<Mass> weight = Quantities.getQuantity(1, Units.KILOGRAM);,那么Quantity<Mass> weight = Quantities.getQuantity(1, Units.POUND);在哪里?
【问题讨论】:
标签:
java
units-of-measurement
【解决方案1】:
对于不只是 SI 单位的测量,您可以使用 Units of Measurement 项目中的一些其他 API(其中包括 indriya API)。
具体来说,CLDR 和 USCustomary 类可能很有趣。但是,我没有成功组合来自不同类别的单元,例如用于转换(请参阅下面的注释掉的代码)。
一些例子:
import javax.measure.Quantity;
import javax.measure.quantity.Length;
import javax.measure.quantity.Mass;
import systems.uom.unicode.CLDR;
import systems.uom.common.USCustomary;
import tec.units.ri.quantity.Quantities;
import tec.units.ri.unit.Units;
...
Quantity<Mass> weight1 = Quantities.getQuantity(1, Units.KILOGRAM);
Quantity<Mass> weight2 = Quantities.getQuantity(1, USCustomary.POUND);
// javax.measure.IncommensurableException: kg is not compatible with lb
//Double d2 = Units.KILOGRAM.getConverterTo(CLDR.POUND).convert(1);
Quantity<Mass> weight3 = Quantities.getQuantity(123.45, CLDR.GRAM);
Quantity<Mass> weight4 = Quantities.getQuantity(123.45, CLDR.OUNCE);
Quantity<Mass> weight5 = Quantities.getQuantity(123.45, CLDR.OUNCE_TROY);
Double ounces = CLDR.GRAM.getConverterTo(CLDR.OUNCE)
.convert(weight3.getValue()).doubleValue();
System.out.println(weight3.getValue() + " grams = " + ounces + " ounces");
Quantity<Length> dist1 = Quantities.getQuantity(123.45, CLDR.KILOMETER);
Double miles = CLDR.KILOMETER.getConverterTo(CLDR.MILE)
.convert(dist1.getValue()).doubleValue();
System.out.println(dist1.getValue() + " kilometers = " + miles + " miles");
以上示例的输出是:
123.45 grams = 4.354570602675702 ounces
123.45 kilometers = 76.70827368169888 miles
我的 POM 依赖项是:
<dependencies>
<dependency>
<groupId>javax.measure</groupId>
<artifactId>unit-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>tec.units</groupId>
<artifactId>unit-ri</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>systems.uom</groupId>
<artifactId>systems-unicode</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>systems.uom</groupId>
<artifactId>systems-common</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>systems.uom</groupId>
<artifactId>systems-quantity</artifactId>
<version>2.0.2</version>
</dependency>
</dependencies>