Existe-t-il un moyen pour que les rails impriment un nombre avec des virgules?
Par exemple, si j'ai un numéro 54000000.34, je peux exécuter <% = number.function%>, qui afficherait "54,000,000.34"
Merci!
ruby-on-rails
ruby
Jess
la source
la source
ActionView::Helpers::NumberHelper
dans le module.number_with_delimiter
est trop complexe et très lent, avec d'énormes profondeurs de piles d'appels. Ili18n
permet de formater tous les nombres connus de l'humanité et des civilisations extraterrestres (ou peut-être simplement de choisir l'un,
ou.
pour les chiffres décimaux, même si vous le spécifiez comme argument). Il alloue des milliers d'objets (ses modèles de performances sont donc complexes et difficiles à profiler). Pensez à utiliser uniquement des expressions rationnelles si vous n'avez pas besoin de prendre en charge différentes façons de formater les nombres en fonction des paramètres régionaux.Pour toute personne n'utilisant pas de rails:
la source
number.to_s.reverse.scan(/(?:\d*\.)?\d{1,3}-?/).join(',').reverse
\1
suffisant? Merci.La façon directe de le faire, avec ou sans Rails , est:
Pour plus d'options, voir Extensions de base du support actif - Numérique - Formatage .
la source
ActiveSupport::NumberHelper.number_to_delimited
. Cette réponse mérite beaucoup plus de votes positifs.Oui, utilisez le NumberHelper . La méthode que vous recherchez est number_with_delimiter .
la source
Si vous souhaitez ajouter des virgules en dehors des vues et que vous ne souhaitez pas inclure certains modules, vous pouvez utiliser la méthode number_to_delimited (rails version> = 4.02). Par exemple:
la source
Si vous le faites beaucoup mais aussi pour votre information car ce n'est pas impliqué par ce qui précède, Rails a des valeurs par défaut raisonnables pour la
number_with_delimiter
méthode.Pas besoin de fournir la valeur du délimiteur si vous le faites de la manière la plus courante.
la source
Une meilleure façon pour ceux qui n'utilisent pas de rails qui gèrent les décimales:
Si vous voulez un délimiteur différent, modifiez le dernier ',' dans l'expression régulière.
Pour les bonus, voici comment fonctionne l'expression régulière:
\\1
.\\1
devient une\1
fois évalué qui correspond au premier groupe de capture dans l'expression régulière. Dans ce regex qui est(\d)
.(\d)(?=(\d\d\d)+)
correspond à un chiffre suivi d'un ou plusieurs groupes de 3 chiffres. Le premier ensemble de parens est notre\1
groupe de capture, le second le serait\2
. Si nous devions en rester là, nous obtiendrions:123456.gsub!(/(\d)(?=(\d\d\d)+)/, "\\1,") #=> 1,2,3,456
c'est parce que 1234 correspondances, 2345 correspondances et 3456 correspondances, nous mettons donc une virgule après le 1, le 2 et le 3.(\d)(?=(\d\d\d)+(?!\d))
signifie donc faire correspondre un chiffre suivi de 3 chiffres qui ne sont pas suivis d'un chiffre. La raison pour laquelle cela fonctionne est que gsub continuera de remplacer les éléments qui correspondent à la chaîne. Si nous devions seulement remplacer le premier match, alors pour un nombre comme 123456789, nous aurions 123456,789. Étant donné que 123456 789 correspond toujours à notre expression régulière, nous obtenons 123 456 789.Voici où j'ai obtenu le code: https://github.com/rails/rails/blob/master/activesupport/lib/active_support/number_helper.rb#L298-L300
Et voici où j'ai appris ce qui se passe dans cette expression régulière: http://www.tutorialspoint.com/ruby/ruby_regular_expressions.htm
la source
{{ value | round | replace: "(\d)(?=(\d\d\d)+(?!\d))", "$1," | prepend: "$" }}
Une autre solution qui n'utilise pas Helpers: formatez avec 2 décimales, puis remplacez. par ,
la source
Vous pouvez utiliser des méthodes de
ActiveSupport
Par exemple:
ActiveSupport::NumberHelper::number_to_currency(10000.1234,{precision: 2,unit: ''})
la source
C'était ma voie en rubis
Addition addition: Fondamentalement, il ajoute toutes les virgules entre les nombres et ne sélectionne que celles où l'index + 1% 6
Je pensais que les virgules jusqu'à 100 étaient bien, mais si vous voulez un nombre super long, faites simplement 100 un nombre plus élevé
la source
nouvelle syntaxe
Si vous souhaitez utiliser le délimiteur pour de l'argent, vous pouvez le faire
cela ajoutera
$
aussi. Si vous utilisezmoney
gem, vous pouvez le faireCela mettra également
$
.number_with_delimiter
argent rubis
number_to_currency
la source
Les éléments suivants font l'affaire à la fois pour le délimiteur et la précision ( référence API ).
(ou simplement à partir de vues
number_to_rounded
, pas besoin du suffixe)HTH
la source
pour les gens de javascript
:)
la source