2017-04-09 1 views
2

Le formatage d'une unité de volume fonctionne correctement en millilitres et en centilitres mais échoue pour les décilitres.JSR 363: formation d'une unité de volume en décilitre

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

Ce code imprime:

ml 
cl 
㎥/10000.0 

Comment formater l'unité de volume "décilitre" pour afficher "dl"?

Répondre

0

Merci d'avoir porté cela à notre attention. https://github.com/unitsofmeasurement/unit-ri/issues/54 montre que les préfixes ne sont pas automatiquement propagés dans toutes les unités de SimpleUnitFormat.

Pour les unités prêtes à l'emploi avec une implémentation, SimpleUnitFormat doit les connaître. Va vérifier, si elle peut être adressée, voir https://github.com/unitsofmeasurement/unit-ri/issues/60.

La plupart des autres implémentations UnitFormat, par ex. ceux qui se trouvent dans l'implémentation Java SE 8+ uom-se ou les modules d'extension traitent cela différemment. C'est une limitation connue de SimpleUnitFormat (c'est pourquoi on l'appelle "simple") pour s'assurer qu'elle fonctionne de la même manière sur les très petits systèmes exécutant Java ME Embedded. Si votre application est capable d'utiliser Java SE 8 et plus ou si vous ne rencontrez aucun problème lors de la mise à jour de la version Java, veuillez prendre en compte ceci. À ce stade, le RI doit être rétrocompatible avec ME Embedded, donc le UnitFormat par défaut est SimpleUnitFormat pour toutes les implémentations. Appel

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

au-dessus de l'implémentation Java SE vous obtiendrez le EBNFUnitFormat et basé sur les tests unitaires et de l'absence de rapports de question, il devrait y travailler.

Cordialement, Werner

+0

Semble code fonctionne en appelant 'getUnitFormat ("ASCII")'. Il semblerait qu'il manque une ligne pour 'DEFAULT.label (MetricPrefix.DECI (LITER)," dl ");' à la ligne 963 de 'SimpleUnitFormat' (version 1.0.2). – Andreas

+0

On dirait que cela a glissé, nous l'avons en soi. Merci de m'avoir signalé. Il devrait être dans un prochain paquet de mise à jour. Visant à faire cela pendant Pâques, donc environ. une semaine à partir de maintenant. 1.0.3-SNAPSHOT fonctionnera immédiatement, s'il vous plaît essayez là. –