2

格式化体积单位以毫升和厘升为单位可以正常工作,但无法以分升为单位。

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”?

4

1 回答 1

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,因此默认UnitFormat适用SimpleUnitFormat于所有实现。打电话

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

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

问候,维尔纳

于 2017-04-09T15:59:17.800 回答