Есть ли способ, чтобы рельсы распечатывали число с запятыми в нем?
Например, если у меня есть номер 54000000.34, я могу запустить <% = number.function%>, которая выведет «54,000,000.34»
Спасибо!
ruby-on-rails
ruby
Джесс
источник
источник
ActionView::Helpers::NumberHelper
внутри модуля.number_with_delimiter
слишком сложный и очень медленный, с огромной глубиной стеков вызовов. Он используетсяi18n
для того, чтобы иметь возможность форматировать любые числа, известные человечеству и внеземным цивилизациям (или, может быть, просто выбрать один,
или.
для десятичных цифр, даже если вы укажете его в качестве аргумента). Он распределяет тысячи объектов (поэтому его шаблоны производительности сложны и трудно профилируемы). Попробуйте использовать регулярные выражения, если вам не нужно поддерживать разные способы форматирования чисел в зависимости от локали.Для тех, кто не использует рельсы:
источник
number.to_s.reverse.scan(/(?:\d*\.)?\d{1,3}-?/).join(',').reverse
\1
достаточно? Спасибо.Прямой способ сделать это с Rails или без него:
Дополнительные параметры см. В разделе Расширения активной поддержки - Числовые - Форматирование .
источник
ActiveSupport::NumberHelper.number_to_delimited
также. Этот ответ заслуживает гораздо больше голосов.Да, используйте NumberHelper . Метод, который вы ищете, это number_with_delimiter .
источник
Если вы хотите добавить запятые вне представлений и не хотите включать некоторые модули, вы можете использовать метод number_to_delimited (rails version> = 4.02). Например:
источник
Если вы делаете это много, но также и к сведению, потому что это не подразумевается выше, у Rails есть разумные значения по умолчанию для
number_with_delimiter
метода.Не нужно указывать значение разделителя, если вы делаете это наиболее типичным способом.
источник
Лучший способ для тех, кто не использует рельсы, которые обрабатывают десятичные дроби:
Если вы хотите использовать другой разделитель, измените последний символ ',' в регулярном выражении.
Для бонуса, это то, как работает регулярное выражение:
\\1
.\\1
становится\1
при оценке, которая соответствует первой группе захвата в регулярном выражении. В этом регулярном выражении это(\d)
.(\d)(?=(\d\d\d)+)
соответствует цифре, за которой следуют 1 или более групп из 3 цифр. Первый набор паренов - это наша\1
группа захвата, второй будет\2
. Если бы мы просто оставили это, мы получили бы:123456.gsub!(/(\d)(?=(\d\d\d)+)/, "\\1,") #=> 1,2,3,456
Это потому, что 1234 совпадения, 2345 совпадений и 3456 совпадений, поэтому мы ставим запятую после 1, 2 и 3.(\d)(?=(\d\d\d)+(?!\d))
означает совпадение с цифрой, за которой следуют 3 цифры, за которыми не следует цифра. Причина, по которой это работает, заключается в том, что gsub будет продолжать заменять вещи, соответствующие строке. Если бы мы собирались заменить только первый матч, то для числа, такого как 123456789, мы получили бы 123456,789. Поскольку 123456,789 все еще соответствует нашему регулярному выражению, мы получаем 123,456,789.Вот где я получил код: https://github.com/rails/rails/blob/master/activesupport/lib/active_support/number_helper.rb#L298-L300
И вот где я узнал о том, что происходит в этом регулярном выражении: http://www.tutorialspoint.com/ruby/ruby_regular_expressions.htm
источник
{{ value | round | replace: "(\d)(?=(\d\d\d)+(?!\d))", "$1," | prepend: "$" }}
Другое решение, которое не использует хелперы: отформатируйте с двумя десятичными знаками, а затем замените. по ,
источник
Вы можете использовать методы из
ActiveSupport
Например:
ActiveSupport::NumberHelper::number_to_currency(10000.1234,{precision: 2,unit: ''})
источник
Это был мой путь в рубине
Редактирование дополнения: по существу, оно добавляет все запятые между числами и выбирает только те, где индекс + 1% 6
Я полагал, что запятые до 100 - это хорошо, но если вы хотите получить супер длинное число, просто сделайте 100 большим числом
источник
новый синтаксис
Если вы хотите, чтобы пользователь delimeter за деньги, то вы можете сделать
это тоже добавит
$
. Если вы используетеmoney
драгоценный камень, то вы можете сделатьЭто тоже будет ставить
$
.number_with_delimiter
рубиновые деньги
number_to_currency
источник
Следующее делает трюк как для разделителя, так и для точности ( API ref ).
(или просто из представлений
number_to_rounded
, суффикс не нужен)НТН
источник
для javascript
:)
источник