Comment faire pour formater un nombre de 1000 “1 000”
J'ai besoin d'un moyen de formater les nombres. J'ai stocké quelques numéros dans ma table DB, par exemple 12500
, et que vous souhaitez imprimer dans ce format 12 500
(il y a donc un espace tous les 3 chiffres). Est-il un moyen élégant pour ce faire?
- number_with_delimiter(12500, délimiteur: "")
Vous devez vous connecter pour publier un commentaire.
voir: http://www.justskins.com/forums/format-number-with-comma-37369.html
il n'est pas construit de façon à elle ( à moins que vous à l'aide de Rails, ActiveSupport Ne disposent de méthodes pour ce faire), mais vous pouvez utiliser une expression régulière comme
\&,
avec\&
) et ça marchera.n.to_s.reverse.gsub(/...(?!-)(?=.)/,'\&,').reverse
. Par exemple: "-174", pas "-,174".reverse
's:str=n.to_s; f=str.size%3; str[0,f] << str[f..-1].gsub(/.../, ' \&')
..
's pour correspondre uniquement des nombres au lieu de quoi que ce soit. Je ne me souviens plus de la syntaxe exacte de ruby regexes ces jours, mais quelque chose comme/[0-9]{3}(?=[0-9])/
ou le long de ces lignes. Voir steenslag la réponse ci-dessousActivesupport utilise cette regexp (et pas de marche arrière marche arrière).
/(\d)(?=(\d\d\d)+$)/
?Voici une autre méthode qui est propre et assez simple si vous faites affaire avec des entiers:
Fonctionne très bien pour les entiers. Bien sûr, cet exemple en particulier, seront séparés par des virgules, mais le passage à des espaces ou tout autre séparateur est aussi simple que de remplacer le paramètre dans la
join
méthode.formatted_n = n.to_s.reverse.gsub(/...(?=.)/,'\&,').reverse
plus vite que cette solution 😉La document officiel suggère de trois façons différentes:
1) à l'Aide de lookbehind et d'anticipation (Nécessite oniguruma)
2) en Utilisant seulement d'anticipation. Identique à steenslag de réponse.
3) à l'Aide de ni anticipation, ni lookbehind
gsub!
ousub!
ont été utilisés.nil
pourrait être remplacé par n'importe littérale. - Il Correct? Est-ce toujours équivalent àwhile s.gsub!(/(.*\d)(\d{3})/, '\1 \2'); end
(qui, je pense, lit un peu mieux)?gsub!
était inutile. J'ai édité.très simple:
number_with_delimiter(12500, delimiter: " ")
voir: http://apidock.com/rails/ActionView/Helpers/NumberHelper/number_with_delimiter
Donc, c'est assez fou et hackish, mais il fait le travail...
each_slice
pour éviter de répéter des expressions régulièresD'une autre manière:
Vous pouvez toujours Ouvrir la Fixnum de classe et d'ajouter ce pour des raisons de commodité:
Tout, mais les réponses utilisez
n.to_s
. @MrMorphe n'a pas, mais il crée un tableau àjoin
ed. Voici une façon qui n'utilise ni Fixnum#to_s ni Tableau#join.Hmmm. C'est que la colonne sur la droite de basculement?
Une autre voie, qui utilise
to_s
mais pasjoin
:C'est vieux, mais la manière la plus rapide et la plus élégante que j'ai pu trouver pour faire ceci est:
Je vais essayer et d'ajouter des repères à un certain point.
D'une autre manière:
Ici, "le délimiteur est
' '
(espace), vous pouvez spécifier','
pour de l'argent de la conversion."Je viens de tombé sur ce fil alors que vous cherchez un moyen format de la valeur de la devise américaine. J'ai pris une approche légèrement différente de la regex solutions proposées:
Cela pourrait être paramétrée pour la mise en forme d'autres devises.
Je suis conscient que c'est une vieille question, mais.
pourquoi ne pas simplement utiliser une sous-chaîne de substitution.
en pseudo-code....
Je sais que ce n'est pas languange, mais j'espère que vous obtenez l'idée.
David