जवाबों:
आप number_with_delimiterविधि चाहते हैं । उदाहरण के लिए:
<%= number_with_delimiter(@number, :delimiter => ',') %>
वैकल्पिक रूप से, आप number_with_precisionयह सुनिश्चित करने के लिए विधि का उपयोग कर सकते हैं कि संख्या हमेशा दशमलव के दो दशमलव स्थानों के साथ प्रदर्शित होती है:
<%= number_with_precision(@number, :precision => 2, :delimiter => ',') %>
number_with_delimiterअत्यधिक जटिल और वास्तव में धीमी है, कॉल स्टैक की भारी गहराई के साथ। इसका उपयोग i18nमानवता और अलौकिक सभ्यताओं (या शायद सिर्फ ,या तो या .दशमलव अंकों के लिए चुनने के लिए किया जाता है, भले ही आप इसे तर्क के रूप में निर्दिष्ट करें) को ज्ञात करने में सक्षम हों । यह हजारों वस्तुओं को आवंटित करता है (इसलिए इसका प्रदर्शन पैटर्न जटिल और प्रोफ़ाइल के लिए कठिन है)। यदि आप लोकेल के आधार पर संख्याओं को प्रारूपित करने के लिए अलग-अलग तरीकों का समर्थन करने की आवश्यकता नहीं है, तो केवल रेगेक्स का उपयोग करने पर विचार करें।
रेल का उपयोग नहीं करने वाले किसी के लिए:
number.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
number.to_s.reverse.scan(/(?:\d*\.)?\d{1,3}-?/).join(',').reverse
\1पर्याप्त नहीं है ? धन्यवाद।
ऐसा करने का सीधा तरीका, रेल के साथ या उसके बिना है:
require 'active_support/core_ext/numeric/conversions'
12345.to_s(:delimited) # => "12,345"
12345.6789.to_s(:delimited) # => "12,345.6789"
अधिक विकल्पों के लिए, सक्रिय समर्थन कोर एक्सटेंशन - संख्यात्मक - स्वरूपण देखें ।
ActiveSupport::NumberHelper.number_to_delimited। यह उत्तर बहुत अधिक उत्थान के लायक है।
हाँ, NumberHelper का उपयोग करें । जिस विधि की आप तलाश कर रहे हैं, वह नंबर_with_delimiter है ।
number_with_delimiter(98765432.98, :delimiter => ",", :separator => ".")
# => 98,765,432.98
यदि आप विचारों के बाहर अल्पविराम जोड़ना चाहते हैं और आप कुछ मॉड्यूल शामिल नहीं करना चाहते हैं, तो आप नंबर_to_delimited विधि (रेल संस्करण> = 4.02) का उपयोग कर सकते हैं । उदाहरण के लिए:
#inside anywhere
ActiveSupport::NumberHelper.number_to_delimited(1000000) # => "1,000,000"
यदि आप इसे बहुत कुछ कर रहे हैं, लेकिन यह भी FYI करें क्योंकि यह ऊपर से निहित नहीं है, तो रेल्स के पास number_with_delimiterविधि के लिए समझदार चूक हैं ।
#inside controller or view
number_with_delimiter(2444323.4)
#=> 2,444,323.30
#inside console
helper.number_with_delimiter(233423)
#=> 233,423
यदि आप इसे सबसे विशिष्ट तरीके से कर रहे हैं, तो सीमांकक मूल्य की आपूर्ति करने की आवश्यकता नहीं है।
उन रेलों का उपयोग न करने का एक बेहतर तरीका जो दशमलव को संभालते हैं:
parts = number.to_s.split('.')
parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1,")
parts.join('.')
यदि आप भिन्न परिसीमन चाहते हैं, तो अंतिम ',' को रेगेक्स में बदलें।
बोनस के लिए, यह है कि रेगेक्स कैसे काम कर रहा है:
\\1। जब मूल्यांकन किया \\1जाता \1है जो regex में पहले कैप्चर समूह से मेल खाता है। इस regex में है कि(\d) ।(\d)(?=(\d\d\d)+)3 अंकों के 1 या अधिक समूहों के बाद एक अंक का मिलान कर रहा है। Parens का पहला सेट हमारा \1कब्जा समूह है, दूसरा होगा \2। अगर हम इसे उस पर छोड़ देते तो हमें यह मिल जाता:
123456.gsub!(/(\d)(?=(\d\d\d)+)/, "\\1,") #=> 1,2,3,456 यह इसलिए है क्योंकि १२३४ मैच, २३४५ मैच और ३४५६ मैच तो हमने १, २ और ३ के बाद कॉमा लगाया।(\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
और यहाँ है कि मैं उस regex में क्या हो रहा है के बारे में सीखा है: http://www.tutorialspoint.com/ruby/ruby_ अनियमित_expressions.htm
{{ value | round | replace: "(\d)(?=(\d\d\d)+(?!\d))", "$1," | prepend: "$" }}
एक अन्य समाधान जो हेल्पर्स का उपयोग नहीं करता है: 2 दशमलव स्थानों के साथ प्रारूप करें, और फिर प्रतिस्थापित करें। द्वारा ,
puts(("%.2f" % 2.5666).gsub('.',','))
>> 2,57
def add_commas(numstring)
correct_idxs = (1..100).to_a.select{|n| n % 6 == 0}.map{|n| n - 1}
numstring.reverse.chars.join(",").chars.select.with_index{|x, i| i.even? || correct_idxs.include?(i)}.join.reverse
end
माणिक में मेरा यही तरीका था
जोड़ संपादित करें: मूल रूप से यह संख्याओं के बीच सभी अल्पविराम जोड़ता है और केवल उन लोगों का चयन करता है जहां सूचकांक + 1% 6
मुझे लगा कि कॉमा 100 तक ठीक है, लेकिन अगर आप एक सुपर लंबी संख्या चाहते हैं तो बस 100 को एक उच्च संख्या बनाएं
नया वाक्यविन्यास
number_with_delimeter(@number, delimeter: ",")
यदि आप पैसे के लिए उपयोगकर्ता परिधि करना चाहते हैं तो आप कर सकते हैं
number_to_currency(@number)
यह $भी जोड़ देगा । यदि आप moneyमणि का उपयोग कर रहे हैं तो आप कर सकते हैं
Money.new(@number,"USD").format
यह भी डाला जाएगा $ ।
निम्नलिखित दोनों सीमांकक और परिशुद्धता ( एपीआई रेफरी ) के लिए चाल है ।
ActiveSupport::NumberHelper.number_to_rounded(1234.532, delimiter: ',', precision: 1)
(या केवल विचारों से number_to_rounded, प्रत्यय की कोई आवश्यकता नहीं)
HTH
ActionView::Helpers::NumberHelperभीतर शामिल करके इसे मॉड्यूल से उपयोग करने में सक्षम होना चाहिए ।