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

Как отформатировать единицу громкости "DECILITRE" для отображения "dl"?

1 ответ

Спасибо, что сообщили нам об этом. 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 и, основываясь на модульных тестах и ​​отсутствии отчетов о проблемах, должны работать там.

С уважением, Вернер

Другие вопросы по тегам