2017-04-09 33 views
2

格式化体积单位可以以毫升和厘correctly为单位正常工作,但不能达到分升。JSR 363:以分升为单位格式化体积单位

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 

如何卷单元 “分升” 以显示 “DL” 格式化?

回答

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和基于单元测试和缺乏问题报告应该在那里工作。

问候, 沃纳

+0

似乎代码工作通过调用'getUnitFormat( “ASCII”)'。对于'SimpleUnitFormat'(版本1.0.2)的第963行中的'DEFAULT.label(MetricPrefix.DECI(LITER),“dl”);'似乎缺少一行。 – Andreas

+0

看起来像滑倒,我们有它在国内。感谢您指出。它应该在即将到来的更新包中。为了在复活节中做到这一点,所以约。一个星期后。 1.0.3-SNAPSHOT将立即生效,请在此尝试。 –