¿Hay alguna manera de que los rieles impriman un número con comas?
Por ejemplo, si tengo un número 54000000.34, puedo ejecutar <% = number.function%>, que imprimiría "54,000,000.34"
¡Gracias!
ruby-on-rails
ruby
Encadenar
fuente
fuente
ActionView::Helpers::NumberHelper
dentro del módulo.number_with_delimiter
es demasiado complejo y realmente lento, con enormes profundidades de pilas de llamadas. Suelei18n
ser capaz de formatear cualquier número conocido por la humanidad y las civilizaciones extraterrestres (o tal vez solo para elegir uno,
o.
para dígitos decimales, incluso si lo especifica como argumento). Asigna miles de objetos (por lo que sus patrones de rendimiento son complejos y difíciles de perfilar). Considere simplemente usar expresiones regulares si no necesita admitir diferentes formas de formatear números dependiendo de la configuración regional.Para cualquiera que no use rieles:
fuente
number.to_s.reverse.scan(/(?:\d*\.)?\d{1,3}-?/).join(',').reverse
\1
suficiente? Gracias.La forma directa de hacer esto, con o sin Rails , es:
Para obtener más opciones, consulte Extensiones principales de soporte activo - Numérico - Formateo .
fuente
ActiveSupport::NumberHelper.number_to_delimited
. Esta respuesta merece muchos más votos a favor.Sí, use el NumberHelper . El método que está buscando es number_with_delimiter .
fuente
Si desea agregar comas fuera de las vistas y no desea incluir algunos módulos, puede usar el método number_to_delimited (versión de rails> = 4.02). Por ejemplo:
fuente
Si lo está haciendo mucho pero también para su información porque no está implícito en lo anterior, Rails tiene valores predeterminados razonables para el
number_with_delimiter
método.No es necesario proporcionar el valor del delimitador si lo está haciendo de la manera más típica.
fuente
Una mejor manera para aquellos que no usan rieles que maneja decimales:
Si desea un delimitador diferente, cambie el último ',' en la expresión regular.
Como bonificación, así es como funciona la expresión regular:
\\1
.\\1
se convierte\1
cuando se evalúa cuál coincide con el primer grupo de captura en la expresión regular. En esta expresión regular que es(\d)
.(\d)(?=(\d\d\d)+)
coincide con un dígito seguido de 1 o más grupos de 3 dígitos. El primer grupo de padres es nuestro\1
grupo de captura, el segundo sería\2
. Si lo dejáramos así, obtendríamos:123456.gsub!(/(\d)(?=(\d\d\d)+)/, "\\1,") #=> 1,2,3,456
Esto se debe a 1234 coincidencias, 2345 coincidencias y 3456 coincidencias, por lo que colocamos una coma después del 1, el 2 y el 3.(\d)(?=(\d\d\d)+(?!\d))
significa que coincide con un dígito seguido de 3 dígitos que no son seguidos por un dígito. La razón por la que esto funciona es que gsub seguirá reemplazando cosas que coincidan con la cadena. Si solo íbamos a reemplazar el primer partido, entonces para un número como 123456789 obtendríamos 123456,789. Como 123456,789 todavía coincide con nuestra expresión regular, obtenemos 123,456,789.Aquí es donde obtuve el código: https://github.com/rails/rails/blob/master/activesupport/lib/active_support/number_helper.rb#L298-L300
Y aquí es donde aprendí acerca de lo que está sucediendo en esa expresión regular: http://www.tutorialspoint.com/ruby/ruby_regular_expressions.htm
fuente
{{ value | round | replace: "(\d)(?=(\d\d\d)+(?!\d))", "$1," | prepend: "$" }}
Otra solución que no usa Helpers: formatee con 2 decimales y luego reemplace. por
fuente
Puedes usar métodos de
ActiveSupport
Por ejemplo:
ActiveSupport::NumberHelper::number_to_currency(10000.1234,{precision: 2,unit: ''})
fuente
Este era mi camino en rubí
Edición adicional: Básicamente, agrega todas las comas entre los números y solo selecciona aquellas en las que el índice + 1% 6
Me imaginé que las comas hasta 100 estaban bien, pero si quieres un número súper largo simplemente haz 100 un número más alto
fuente
nueva sintaxis
Si desea usar el delimitador por dinero, puede hacerlo
esto agregará
$
también. Si estás usandomoney
gema, entonces puedes hacerEsto también lo pondrá
$
.número_con_delimitador
dinero rubí
number_to_currency
fuente
Lo siguiente hace el truco para el delimitador y la precisión ( API ref ).
(o solo desde las vistas
number_to_rounded
, no es necesario el sufijo)HTH
fuente
para la gente de javascript
:)
fuente