5 votes

Symbole de devise donné par DecimalFormat semble invalide

Je rencontre le problème suivant en Java 8

import java.util.*;
import java.text.*;
import java.lang.*;

class NumberTest5 {
    public static void main(String[] args) {
        Locale loc = new Locale("sr","ME");
        DecimalFormat df = (DecimalFormat)NumberFormat.getCurrencyInstance(loc);
        System.out.println("\n"+"currencySymbol:"+df.getPositivePrefix()+"\tlength:"+df.getPositivePrefix().length());
        //ici le résultat ci-dessus est currencySymbol:  €+(caractère espace insécable)
        //longueur:2     
    }
}

la vraie question est pourquoi il y a un caractère supplémentaire ajouté au symbole de devise ..?

pourquoi le programme ci-dessus se comporte-t-il de cette manière ...?

quel est le problème en lui et comment le rectifier ..?

Merci

6voto

Sotirios Delimanolis Points 77933

Ce n'est pas invalide.

Le suivant

Locale loc = new Locale("sr","ME");

représente le Locale pour le serbe au Monténégro. Je ne trouve pas l'équivalent pour Java, mais voici une description de ce paramètre régional pour glibc. Sous Devise, vous remarquerez que L'espace entre le symbole et la valeur est défini sur 1, ce qui indique que

un espace sépare le symbole de la valeur

Par conséquent, si vous formatez une valeur, par exemple

System.out.println(df.format(123.45));

vous obtiendrez

€ 123,45

avec un espace entre le symbole de la devise et la valeur.

C'est ce que représente le préfixe positif.

0voto

La méthode getPositivePrefix () renverra une chaîne avec le symbole de la devise et un caractère d'espace - Ils font cela afin d'avoir le symbole de la devise et la valeur séparés.

Vous ne voulez pas le caractère d'espace? Vous pouvez faire deux choses:


Solution 1

String symbol = df.getDecimalFormatSymbols().getCurrencySymbol();
    System.out.println("\n"+"currencySymbol:"+ symbol + "500\tlength:"+symbol.length());

Sortie:

currencySymbol:€500 length:1

Solution 2

Ajoutez une séquence d'échappement de tabulation arrière : '\b', cela supprimera l'espace lors de l'impression. Mais la taille de la chaîne de la longueur restera identique lors de l'appel de la méthode length()

String symbol = df.getPositivePrefix();
    System.out.println("\n"+"currencySymbol:" + symbol +"\b500\tlength:"+symbol.length());

Sortie:

currencySymbol:€500 length:2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X