JSR 363:以decilitre格式化一个卷单位

时间:2017-04-09 15:29:24

标签: java units-of-measurement jsr363

格式化音量单位可以在毫升和厘升的情况下正常工作,但无法进行分析。

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

如何格式化音量单位&#34; DECILITRE&#34;显示&#34; dl&#34;?

1 个答案:

答案 0 :(得分:0)

感谢您引起我们的注意。 https://github.com/unitsofmeasurement/unit-ri/issues/54 显示,前缀不会自动传播到SimpleUnitFormat中的所有单位。

对于带有实现的开箱即用单元,SimpleUnitFormat应该知道它们。如果可以解决,请查看https://github.com/unitsofmeasurement/unit-ri/issues/60

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

final UnitFormat unitFormat =     
     ServiceProvider.current().getUnitFormatService().getUnitFormat("EBNF");
在Java SE实现之上的

将为您提供EBNFUnitFormat,并且基于单元测试和缺少问题报告,它应该在那里工作。

此致 沃纳