除了 JSR-275(被拒绝和放弃)和 Units of Measure API(似乎没有任何生产质量的实现)之外,是否有任何 Java 库处理度量单位?
2 回答
我编写了一个不使用静态排版的单位库(在我遇到的许多实际应用程序中,我希望这样的库更麻烦)。它旨在处理基于字符串的单位以及更清晰的定义单位。一些支持的功能包括:
值的转换,例如:
Units.convert(3, "m", "mm"); Units.convert(3, SiBaseUnit.METER, "mm");
都会返回
3000
。简化基于字符串的单位,例如:
Units.simplify("kg^3 m^4 s^-6 A^-1");
会回来
"J^2 T"
的。在特定上下文中查找单位的名称,例如:
Units.inContext("lx s", UnitContextMatch.COMPATIBLE, PhysicsContext.PHOTOMETRY)
将返回一个包含
("luminous exposure")
.完全支持任意对数单位,例如
LevelUnit.BEL.inReferenceTo(1, Unit.of("mV")); // automatically determines ref type -> root power LevelUnit.BEL.inReferenceTo(1, Unit.of("W"), LevelUnitReferenceType.POWER); // specify type explicitly Unit.of("ln(re 1 nA)") == LevelUnit.NEPER.inReferenceTo(1, Unit.of("nA")); // true
支持 SI 前缀、二进制前缀并允许用户轻松实现自己的前缀
如果不相关,可以处理未知单位,例如:
Units.convert(3, "m^2 this_is_not_a_unit", "mm^2 this_is_not_a_unit");
将返回,因为转换两边的
3e6
未知单位相同。this_is_not_a_unit
对于代码的性能关键部分,可以获得转换因子(如果转换是纯乘法的),例如:
Units.factor("kg", "t");
将返回
1e-3
。允许检查等价性,例如
Units.equivalent(1, "s", "min");
将返回 false,因为
1min
与1s
. 另一方面,检查可兑换性Units.convertible("s", "min");
将返回
true
。紧密集成在坐标库中(从 Java 16 开始,该库仍然需要预览功能,但从 Java 17 开始,它将准备好生产)
常量通过Constant
支持例如的接口实现:
定义自己的常量,例如
// (3 ± 0.2) mole Constant.of(3, 0.2, "mole");
链接命令,例如
// constant with the distance travelled by light in vacuum in (2 ± 0) seconds as value PhysicsConstant.SPEED_OF_LIGHT_IN_VACUUM.mul(2, 0, SiBaseUnit.SECOND); // constant of the elementary charge per (electron) mass PhysicsConstant.ELEMENTARY_CHARGE.div(PhysicsConstant.ELECTRON_MASS); Constant c = Constant.of(3, 0.2, "mole"); PhysicsConstant.SHIELDING_DIFFERENCE_OF_T_AND_P_IN_HT.mul(c);
(简单)不确定性传播
该接口为来自jatex
Constant
模块的接口提供了默认实现,因此常量可以轻松返回正确的 LaTeX 代码。Texable
NIST 定义的大多数物理常数以及一些数学常数的正确记录实现。
https://github.com/unitsofmeasurement/uom-se来自 JSR 363
https://mvnrepository.com/artifact/org.unitsofmeasurement/unit-api/0.6.2-RC1
希望您的问题得到解决。4年前!