除JSR-275和Units of Measure API之外的Java测量库单位

时间:2012-09-22 09:50:26

标签: units-of-measurement jsr-275

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

2 个答案:

答案 0 :(得分:1)

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

  • 值的转换,例如:

    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 units、二进制单位、imperial unitsUS customary unitsatomic unitsplanck units 等等。用户还可以轻松定义自己的单位。

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

    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

  • 紧密集成在 coordinates 库中(从 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);
    
  • (简单的)不确定性传播

  • Constant 接口为 jatex 模块中的 Texable 接口提供默认实现,以便常量可以轻松返回正确的 LaTeX 代码。

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

答案 1 :(得分:0)