Czy istnieje sposób na wydrukowanie na szynach numeru z przecinkami?
Na przykład, jeśli mam numer 54000000.34, mogę uruchomić <% = liczba.funkcja%>, która wyświetliłaby „54 000 000,34”
dzięki!
ruby-on-rails
ruby
Pęto
źródło
źródło
ActionView::Helpers::NumberHelper
do modułu.number_with_delimiter
jest zbyt skomplikowany i bardzo powolny, z ogromną głębokością stosów połączeń. Służyi18n
do formatowania dowolnych liczb znanych ludzkości i cywilizacjom pozaziemskim (lub może po prostu wybrać cyfrę dziesiętną,
lub.
dziesiętną, nawet jeśli podasz ją jako argument). Przydziela tysiące obiektów (więc wzorce wydajności są złożone i trudne do profilowania). Rozważ użycie wyrażeń regularnych, jeśli nie potrzebujesz obsługiwać różnych sposobów formatowania liczb w zależności od ustawień regionalnych.Dla każdego, kto nie używa szyn:
źródło
number.to_s.reverse.scan(/(?:\d*\.)?\d{1,3}-?/).join(',').reverse
\1
wystarcza? Dzięki.Bezpośrednim sposobem na to, z Railsami lub bez , jest:
Aby uzyskać więcej opcji, zobacz Aktywne rozszerzenia podstawowe wsparcia - Numeryczne - Formatowanie .
źródło
ActiveSupport::NumberHelper.number_to_delimited
. Ta odpowiedź zasługuje na dużo więcej pozytywnych opinii.Tak, użyj NumberHelper . Metoda, której szukasz, to number_with_delimiter .
źródło
Jeśli chcesz dodać przecinki poza widokami i nie chcesz dołączać niektórych modułów, możesz użyć metody number_to_delimited (wersja szyn>> 4.02). Na przykład:
źródło
Jeśli robisz to dużo, ale także FYI, ponieważ nie wynika to z powyższego, Rails ma rozsądne wartości domyślne dla tej
number_with_delimiter
metody.Nie musisz podawać wartości separatora, jeśli robisz to w najbardziej typowy sposób.
źródło
Lepszy sposób dla tych, którzy nie używają szyn, które obsługują dziesiętne:
Jeśli chcesz innego separatora, zmień ostatnie „,” w wyrażeniu regularnym.
W przypadku premii działa to wyrażenie regularne:
\\1
.\\1
staje się\1
po ocenie, która pasuje do pierwszej grupy przechwytywania w wyrażeniu regularnym. To jest w tym wyrażeniu regularnym(\d)
.(\d)(?=(\d\d\d)+)
dopasowuje cyfrę, po której następuje 1 lub więcej grup 3 cyfr. Pierwszy zestaw parenów to nasza\1
grupa przechwytywania, drugi byłby\2
. Gdybyśmy to po prostu zostawili, otrzymalibyśmy:123456.gsub!(/(\d)(?=(\d\d\d)+)/, "\\1,") #=> 1,2,3,456
To dlatego, że 1234 mecze, 2345 meczów i 3456 meczów, więc wstawiamy przecinek po 1, 2 i 3.(\d)(?=(\d\d\d)+(?!\d))
oznacza dopasowanie cyfry, po której następują 3 cyfry, po których nie następuje cyfra. Powodem, dla którego to działa, jest to, że gsub będzie zastępował rzeczy pasujące do łańcucha. Gdybyśmy tylko zamienili pierwszy mecz, to dla liczby takiej jak 123456789 otrzymalibyśmy 123456,789. Ponieważ 123456 789 nadal pasuje do naszego wyrażenia regularnego, otrzymujemy 123 456 789.Oto skąd mam kod: https://github.com/rails/rails/blob/master/activesupport/lib/active_support/number_helper.rb#L298-L300
I tutaj dowiedziałem się o tym, co się dzieje w tym wyrażeniu regularnym: http://www.tutorialspoint.com/ruby/ruby_regular_expressions.htm
źródło
{{ value | round | replace: "(\d)(?=(\d\d\d)+(?!\d))", "$1," | prepend: "$" }}
Inne rozwiązanie, które nie korzysta z Pomocników: formatuj z 2 miejscami po przecinku, a następnie zamień. przez ,
źródło
Możesz użyć metod z
ActiveSupport
Na przykład:
ActiveSupport::NumberHelper::number_to_currency(10000.1234,{precision: 2,unit: ''})
źródło
To była moja droga w rubinie
Edycja dodawania: Zasadniczo dodaje wszystkie przecinki między liczbami i wybiera tylko te, w których indeks + 1% 6
Doszedłem do wniosku, że przecinki do 100 są w porządku, ale jeśli chcesz super długiej liczby, po prostu zwiększ 100
źródło
nowa składnia
Jeśli chcesz użyć delimtera dla pieniędzy, możesz to zrobić
to
$
też doda . Jeśli używaszmoney
klejnotu, możesz to zrobićTo też umieści
$
.liczba_z ogranicznikiem
rubinowe pieniądze
liczba_do_ waluty
źródło
Wykonaj sztuczkę zarówno dla separatora, jak i precyzji ( odwołanie API ).
(lub tylko z widoków
number_to_rounded
, nie ma potrzeby przyrostka)HTH
źródło
dla javascript
:)
źródło