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

Java JSR 363:以分升为单位形成体积单位,java,units-of-measurement,jsr363,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 te

设置体积单位的格式以毫升和厘米为单位可以正常工作,但以分升为单位则无法正常工作

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);
    }
}

如何将音量单位“分升”的格式设置为显示“分升”?

感谢您提醒我们这一点。 显示前缀不会自动传播到
SimpleUnitFormat
中的所有单元

对于随实现提供的开箱即用单元,SimpleUnitFormat应该知道它们。将签出,如果可以解决,请参阅

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

final UnitFormat unitFormat =     
     ServiceProvider.current().getUnitFormatService().getUnitFormat("EBNF");
在JavaSE实现之上,您将获得EBNFUnitFormat,基于单元测试和缺少问题报告,它应该在那里工作

问候,,
Werner

似乎代码通过调用
getUnitFormat(“ASCII”)
工作。似乎缺少
DEFAULT.label(MetricPrefix.DECI(升),“dl”)的行在SimpleUnitFormat(1.0.2版)的第963行。看起来像是滑了一下,我们用的是uom se。谢谢你指出。它应该在即将发布的更新包中。计划在复活节期间这样做,所以大约一周后。1.0.3-SNAPSHOT将立即工作,请在那里尝试。
final UnitFormat unitFormat =     
     ServiceProvider.current().getUnitFormatService().getUnitFormat("EBNF");