Bonjour,

Mon programme doit lire les données d'un fichier .csv, lequel contient des caractères constituées de nombres décimaux, au format "41" ou "87,50".

Le séparateur de décimale est donc une virgule et non un point et celui-ci n'est pas toujours présent. Il n'y a pas d'intérêt ici pour un "séparateur de groupe", pour les milliers, les millions, les milliards ...

Dans ma méthode de transformation des valeurs en champ de mesures (nombres à décimales) vers BigDecimal,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
BigDecimal bd = new BigDecimal(0,0f);
génère une erreur NumberFormatException. Cette erreur n'apparaît plus s'il y a un '.' au lieu d'une ','.

Mais les valeurs sont passées plutôt sous forme de chaîne de caractères. La première expression de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
        try
        {
            bd = new BigDecimal(champDeLigneCsv[1]);
            bd.setScale(1, BigDecimal.ROUND_DOWN).toString();
        } catch (NumberFormatException ex)
        {
            bd = null;
        } finally
        {
            mesPuiss.setMesPuissHPl(bd);
        }
génère aussi 'NumberFormatException' lorsque le champs comporte un nombre à décimales, par exemple "87,65". Pas d'erreur si p.ex. "41".

J'effectue à présent un essai avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
    NumberFormat foNbre = NumberFormat.getNumberInstance(Locale.GERMAN);
    DecimalFormat foDéc = (DecimalFormat)foNbre;
mais ça bloque.

Ou bien devrais-je plutôt étudier la solution basée sur la classe 'DecimalFormatSymbols' ? A première vue pas car il ne s'agit pas de changer les symboles apparaissant dans les nombres formatés qui sont produits par une méthode 'format()'.

Directions à essayer mais sans garantie d'aboutir : Problem while converting String to Bigdecimal

Que faut-il programmer pour que des chaînes de caractères correspondant à de simples nombres à décimales, le séparateur de décimales ',' soit substitué au '.' ?

Merci d'avance pour votre aide..