web-dev-qa-db-fra.com

Dans Elixir, comment formatez-vous les nombres avec une interpolation de chaîne

Je veux imprimer une chaîne comme

IO.puts("Count: #{my_count}")

Mais je veux des zéros non significatifs dans la sortie comme

Count: 006

Comment dois-je procéder et où se trouve cette documentation?

26
Matt

Vous pouvez utiliser String.pad_leading/3

my_count
|> Integer.to_string
|> String.pad_leading(3, "0")
40
Dmitry Biletskyy

Je ne suis pas sûr qu'il existe une méthode de formatage entier en chaîne avec un formateur de remplissage dans Elixir. Cependant, vous pouvez compter sur le module Erlang io qui est accessible dans Elixir avec le :io atome.

iex(1)> :io.format "~3..0B", [6]
006:ok

Vous pouvez trouver une explication dans cette réponse . Je le cite ici pour plus de commodité:

"~3..0B" Se traduit par:

 ~F. = ~3.  (Field width of 3)
  P. =   .  (no Precision specified)
Pad  =  0   (Pad with zeroes)
Mod  =      (no control sequence Modifier specified)
  C  =  B   (Control sequence B = integer in default base 10)

Vous pouvez soit l'utiliser directement, soit l'envelopper dans une fonction personnalisée.

iex(5)> :io.format "Count: ~3..0B", [6]
Count: 006:ok
16
Simone Carletti

Vous pouvez également utiliser String.pad_leading/ :

my_count
|> Integer.to_string
|> String.pad_leading(3, "0")

Notez que la note de publication de v1.3. dit:

L'API déroutante String.ljust/3 et String.rjust/3 a été déconseillée en faveur de String.pad_leading/3 et String.pad_trailing/3

Il s'agit d'une dépréciation douce . Son utilisation n'émet aucun avertissement.

12
Tsutomu