1

除了 JSR-275(被拒绝和放弃)和 Units of Measure API(似乎没有任何生产质量的实现)之外,是否有任何 Java 库处理度量单位?

4

2 回答 2

1

我编写了一个不使用静态排版的单位库(在我遇到的许多实际应用程序中,我希望这样的库更麻烦)。它旨在处理基于字符串的单位以及更清晰的定义单位。一些支持的功能包括:

  • 值的转换,例如:

    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").

  • 支持SI 单位、二进制单位、英制单位美国惯用单位原子单位普朗克单位等等。用户还可以轻松定义自己的单位。

  • 完全支持任意对数单位,例如

    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,因为1min1s. 另一方面,检查可兑换性

    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);
    
  • (简单)不确定性传播

  • 该接口为来自jatexConstant模块的接口提供了默认实现,因此常量可以轻松返回正确的 LaTeX 代码。Texable

  • NIST 定义的大多数物理常数以及一些数学常数的正确记录实现。

于 2021-05-07T21:44:43.360 回答
0

https://github.com/unitsofmeasurement/uom-se来自 JSR 363

https://mvnrepository.com/artifact/org.unitsofmeasurement/unit-api/0.6.2-RC1

希望您的问题得到解决。4年前!

于 2017-07-16T22:13:54.857 回答