Formatage de la sortie d'impression numérique Plus tôt, vous avez vu l'utilisation des méthodes print et println pour imprimer des chaînes à la sortie standard (System. out). Puisque tous les nombres peuvent être convertis en chaînes (comme vous le verrez plus loin dans cette leçon), vous pouvez utiliser ces méthodes pour imprimer un mélange arbitraire de chaînes et de nombres. Le langage de programmation Java a d'autres méthodes, cependant, qui vous permettent d'exercer beaucoup plus de contrôle sur votre sortie d'impression lorsque les nombres sont inclus. Les méthodes printf et format Le package java. io comprend une classe PrintStream qui dispose de deux méthodes de formatage que vous pouvez utiliser pour remplacer print et println. Ces méthodes, format et printf. Sont équivalentes les unes aux autres. Le System. out familier que vous avez utilisé se trouve être un objet PrintStream, de sorte que vous pouvez invoquer des méthodes PrintStream sur System. out. Ainsi, vous pouvez utiliser format ou printf n'importe où dans votre code où vous avez précédemment utilisé print ou println. Par exemple, la syntaxe de ces deux méthodes java. io. PrintStream est la même: où format est une chaîne qui spécifie la mise en forme à utiliser et args est une liste des variables à imprimer à l'aide de cette mise en forme. Un exemple simple serait Le premier paramètre, le format. Est une chaîne de format spécifiant comment les objets dans le second paramètre, args. Doivent être formatés. La chaîne de format contient du texte brut ainsi que des spécificateurs de format. Qui sont des caractères spéciaux qui formater les arguments de l'objet. Args. (La notation Object. Args s'appelle varargs, ce qui signifie que le nombre d'arguments peut varier.) Les spécificateurs de format commencent par un signe% () et finissent par un convertisseur. Le convertisseur est un caractère indiquant le type d'argument à mettre en forme. Entre le signe de pourcentage () et le convertisseur vous pouvez avoir des drapeaux facultatifs et des spécificateurs. Il existe de nombreux convertisseurs, indicateurs et spécificateurs, qui sont documentés dans java. util. Formatter Voici un exemple de base: Le d spécifie que la variable unique est un entier décimal. Le n est un caractère de nouvelle ligne indépendant de la plate-forme. La sortie est: Les méthodes printf et format sont surchargées. Chacune a une version avec la syntaxe suivante: Pour imprimer des nombres dans le système français (où une virgule est utilisée à la place de la décimale dans la représentation anglaise des nombres en virgule flottante), par exemple, vous utiliserez: Un exemple Le tableau suivant Répertorie certains des convertisseurs et des indicateurs qui sont utilisés dans l'exemple de programme, TestFormat. java. Qui suit le tableau. Convertisseurs et indicateurs utilisés dans TestFormat. java Dix caractères en largeur, justifiés à droite, avec trois positions après la virgule. Le programme suivant montre certaines des formations que vous pouvez faire avec format. La sortie est affichée entre guillemets dans le commentaire incorporé: Remarque: La discussion dans cette section couvre uniquement les bases du format et des méthodes printf. Pour plus de détails, reportez-vous à la section Basic I O de Essential Trail, dans la page Format. L'utilisation de String. format pour créer des chaînes est traitée dans Strings. La classe DecimalFormat Vous pouvez utiliser la classe java. text. DecimalFormat pour contrôler l'affichage des zéros, des préfixes et des suffixes avant et arrière, le regroupement (milliers) de séparateurs et le séparateur décimal. DecimalFormat offre une grande flexibilité dans le formatage des nombres, mais il peut rendre votre code plus complexe. L'exemple qui suit crée un objet DecimalFormat, myFormatter. En passant une chaîne de motif au constructeur DecimalFormat. La méthode format (), que DecimalFormat hérite de NumberFormat. Est alors invoquée par myFormatter 151it accepte une double valeur comme argument et renvoie le numéro formaté dans une chaîne: Voici un exemple de programme qui illustre l'utilisation de DecimalFormat: Le tableau suivant explique chaque ligne de sortie. Retourne une chaîne formatée par l'habituel Printf de la fonction de bibliothèque C sprintf. Voir ci-dessous pour plus de détails et voir sprintf (3) ou printf (3) sur votre système pour une explication des principes généraux. Perl fait son propre formatage sprintf: il émule la fonction C sprintf (3). Mais ne l'utilise pas sauf pour les nombres à virgule flottante, et même alors seulement les modificateurs standard sont autorisés. Les extensions non standard de votre sprintf local (3) ne sont donc pas disponibles auprès de Perl. Contrairement à printf. Sprintf ne fait pas ce que vous voulez probablement dire quand vous passez un tableau comme votre premier argument. Le tableau est donné contexte scalaire, et au lieu d'utiliser le 0e élément du tableau comme le format, Perl utilisera le nombre d'éléments dans le tableau comme le format, ce qui est presque jamais utile. Perls sprintf permet les conversions universellement connues suivantes: En outre, Perl permet les conversions largement supportées suivantes: Enfin, pour la compatibilité vers l'arrière (et nous signifions vers l'arrière), Perl permet ces conversions inutiles mais largement supportées: Notez que le nombre de conversions Les chiffres de l'exposant dans la notation scientifique produite par e. E. g et G pour les nombres dont le module de l'exposant est inférieur à 100 dépend du système: il peut être égal à trois ou moins (rembourré si nécessaire). En d'autres termes, 1,23 fois dix au 99e peut être soit 1.23e99 ou 1.23e099. De même pour a et A. l'exposant ou les chiffres hexadécimaux peuvent flotter: en particulier l'option de configuration Perl longue durée double peut provoquer des surprises. Entre le et la lettre de format, vous pouvez spécifier plusieurs attributs supplémentaires contrôlant l'interprétation du format. Dans l'ordre, ce sont: Un index explicite de paramètre de format, tel que 2. Par défaut, sprintf formate le prochain argument non utilisé dans la liste, mais cela vous permet de prendre les arguments hors d'ordre: Quand un espace et un signe plus sont donnés Comme les drapeaux à la fois, l'espace est ignoré. Lorsque le drapeau et une précision sont indiqués dans la conversion o, la précision est incrémentée si nécessaire pour le premier. Ce drapeau indique à Perl d'interpréter la chaîne fournie comme un vecteur d'entiers, un pour chaque caractère de la chaîne. Perl applique le format à chaque entier à son tour, puis rejoint les chaînes résultantes avec un séparateur (un point par défaut). Cela peut être utile pour afficher des valeurs ordinales de caractères dans des chaînes arbitraires: Mettez un astérisque avant la v pour remplacer la chaîne à utiliser pour séparer les nombres: Vous pouvez également spécifier explicitement le numéro d'argument à utiliser pour la chaîne de jointure en utilisant quelque chose comme 2v pour Exemple: les arguments sont habituellement formatés de manière à ne présenter que la largeur requise pour afficher la valeur donnée. Vous pouvez remplacer la largeur en plaçant un nombre ici ou en obtenant la largeur du prochain argument (avec) ou d'un argument spécifié (par exemple, avec 2): Si une largeur de champ obtenue est négative, elle a le même effet que - Drapeau: left-justification. Vous pouvez spécifier une précision (pour les conversions numériques) ou une largeur maximale (pour les conversions de chaînes) en spécifiant a. Suivi d'un numéro. Pour les formats à virgule flottante, à l'exception de g et G., cela indique le nombre de positions à droite de la virgule décimale à afficher (la valeur par défaut étant 6). Par exemple: Pour g et G, cela spécifie le nombre maximal de chiffres à afficher, y compris ceux avant la virgule et ceux qui le suivent par exemple: Pour les conversions entières, spécifier une précision implique que la sortie du nombre lui-même doit être nulle - Padded à cette largeur, où le drapeau 0 est ignoré: Pour les conversions de chaîne, spécifier une précision tronque la chaîne pour s'adapter à la largeur spécifiée: Vous pouvez également obtenir la précision de l'argument suivant en utilisant .. ou à partir d'un argument spécifié (par exemple avec .2): Si une précision obtenue est négative, elle ne compte pas du tout de précision. Pour les conversions numériques, vous pouvez spécifier la taille pour interpréter le nombre en utilisant l. H. V. q. L. ou ll. Pour les conversions entières (duox X bi DUO), les nombres sont généralement supposés être n'importe quelle taille entière par défaut sur votre plate-forme (habituellement 32 ou 64 bits), mais vous pouvez l'ignorer pour utiliser à la place un des types C standard, tel que pris en charge Par le compilateur utilisé pour construire Perl: A partir de 5.14, aucun de ceux-ci ne soulève une exception s'ils ne sont pas pris en charge sur votre plate-forme. Toutefois, si les avertissements sont activés, un avertissement de la classe d'avertissement printf est émis sur un indicateur de conversion non pris en charge. Si vous préférez plutôt une exception, procédez comme suit: Si vous souhaitez connaître une dépendance de version avant de lancer le programme, mettez quelque chose comme ceci au sommet: Vous pouvez savoir si votre Perl prend en charge les quads via Config: (EFG EFG), les nombres sont habituellement supposés être la taille en virgule flottante par défaut sur votre plate-forme (double ou double long), mais vous pouvez forcer double long avec q. L. ou ll si votre plate-forme les supporte. Vous pouvez savoir si votre Perl prend en charge les doubles longs via Config: Vous pouvez savoir si Perl considère que le double double est la taille à virgule flottante par défaut à utiliser sur votre plateforme via Config: Il peut également être que les doubles et les doubles longs sont les mêmes Chose: Le spécificateur de taille V n'a aucun effet pour le code Perl, mais est pris en charge pour la compatibilité avec le code XS. Cela signifie utiliser la taille standard pour un entier Perl ou un nombre à virgule flottante, qui est la valeur par défaut. Normalement, sprintf prend le prochain argument inutilisé comme valeur de format pour chaque spécification de format. Si la spécification de format utilise pour exiger des arguments supplémentaires, ceux-ci sont consommés à partir de la liste des arguments dans l'ordre dans lequel ils apparaissent dans la spécification de format avant la valeur à mettre en forme. Lorsqu'un argument est spécifié par un index explicite, cela n'affecte pas l'ordre normal des arguments, même lorsque l'index explicitement spécifié aurait été le prochain argument. Utilise a pour la largeur, b pour la précision et c pour la valeur de format while: utiliserait a pour la largeur et la précision, et b comme la valeur à formater. Voici quelques autres exemples: lorsque vous utilisez un index explicite, le peut avoir besoin d'échappement: Si l'utilisation locale (y compris l'utilisation locale 39: notcharacters39) est en vigueur et POSIX :: setlocale a été appelé, le caractère utilisé pour le séparateur décimal dans Les nombres en virgule flottante formatés sont affectés par la locale LCNUMERIC. Voir perllocale et POSIX.
No comments:
Post a Comment