JSR 363:以分升为单位形成体积单位

2024-01-05

格式化体积单位在毫升和厘升中可以正常工作,但在分升中则失败。

import static tec.units.ri.unit.Units.LITRE;

import javax.measure.Unit;
import javax.measure.format.UnitFormat;
import javax.measure.quantity.Volume;
import javax.measure.spi.ServiceProvider;

import static tec.units.ri.unit.MetricPrefix.*;

public class Example {

    public static void main(String[] args) {

        final UnitFormat unitFormat =    ServiceProvider.current().getUnitFormatService().getUnitFormat();

        final Unit<Volume> MILLILITRE = MILLI(LITRE);
        final Unit<Volume> CENTILITRE = CENTI(LITRE);
        final Unit<Volume> DECILITRE = DECI(LITRE);

        final String mL = unitFormat.format(MILLILITRE);
        final String cL = unitFormat.format(CENTILITRE);
        final String dL = unitFormat.format(DECILITRE);

        System.out.println(mL);
        System.out.println(cL);
        System.out.println(dL);
    }
}

此代码打印:

ml
cl
㎥/10000.0

如何格式化体积单位“DECILITRE”以显示“dl”?


谢谢让我们注意到这个。https://github.com/unitsofmeasurement/unit-ri/issues/54 https://github.com/unitsofmeasurement/unit-ri/issues/54表明,前缀不会自动传播到所有单元SimpleUnitFormat.

对于带有实现的开箱即用单元,SimpleUnitFormat 应该知道它们。会检查一下,是否可以解决,请参阅https://github.com/unitsofmeasurement/unit-ri/issues/60 https://github.com/unitsofmeasurement/unit-ri/issues/60.

大多数其他UnitFormat实施例如在 Java SE 8+ 实现中找到的那些uom-se https://github.com/unitsofmeasurement/uom-se或扩展模块以不同的方式处理这个问题。这是一个已知的限制SimpleUnitFormat(这就是为什么它被称为“简单”),以确保它在运行 Java ME Embedded 的非常小的系统上以相同的方式工作。如果您的应用程序能够使用 Java SE 8 及更高版本,或者您更新 Java 版本没有问题,请考虑这一点。此时RI必须向后兼容ME Embedded,所以默认UnitFormat is SimpleUnitFormat对于所有实现。呼唤

final UnitFormat unitFormat =     
     ServiceProvider.current().getUnitFormatService().getUnitFormat("EBNF");

在 Java SE 实现之上将为您提供 EBNFUnitFormat,并且基于单元测试和缺乏问题报告,它应该可以在那里工作。

问候, 维尔纳

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSR 363:以分升为单位形成体积单位 的相关文章

随机推荐