2011-01-18 6 views
2

j'ai même nombre 100000Rails Nombre de fonction Conversion Format

quand je number_to_currency utilisateur (100000)

il donne - 100,000.00

mais comment puis-je obtenir le format comme 1,00,000.00

comme 100 000 $ semble bien, mais pour le montrer en Rs j'ai besoin de séparateurs (',') comme ceci - 1,00,00,000.00

+1

Qu'est-ce que cela signifie 1,00,00,000.00? Veery nombre étrange, au moins pour moi. Ce n'est pas facile à lire. – klew

+0

Et qu'est-ce que Rs? – klew

+0

Les roupies indiennes sont formatées de cette manière, par ex. $ 100,000,000 sont représentés comme Rs.10,00,00,000 donc .. – rtdp

Répondre

5

caisse http://www.funonrails.com/2011/03/number-to-indian-currency-helper-for.html

def number_to_indian_currency(number, html=true) 
txt = html ? content_tag(:span, 'Rs.', :class => :WebRupee) : 'Rs.' 
"#{txt} #{number.to_s.gsub(/(\d+?)(?=(\d\d)+(\d)(?!\d))(\.\d+)?/, "\\1,")}" 
end 
+0

il y a gem libération de celui-ci 'number_to_indian_currency' qui prend en charge' formatage' ainsi que 'css pour le symbole de roupie' –

0

Je suggère d'écrire votre propre fonction pour effectuer cette mise en forme d'affichage, plutôt que d'écraser number_to_currency. Vous pouvez l'appeler r_number_to_currency ou quelque chose comme ça et le placer dans votre assistant de vue d'application.

0

Oui Pan, je l'ai écrit une aide pour que ...

Quelque chose comme ça -

def rupees_helper(number) 
     number = number.to_s 
     rs = "" 
     number.reverse.chars.each_with_index{|i, index| rs<<i; rs<<"," if index==2; rs<<"," if (index!=number.chars.count-1&&index>3&&index%2==0) } 
     rs = rs.reverse 
     return "Rs. " + rs 
    end 

qui, en passant 1000000 me donne "Rs 10,00,000"

Merci.

1

Je sais qu'il est une réponse tardive.

Mais (RubyMoney) [https://github.com/RubyMoney/money] a une option de formatage pour l'Asie du Sud (peut également être utilisé pour l'Inde).

def number_to_indian_rupee(rupees) 
    paise = rupees * 100 
    Money.new(paise).format(:symbol => 'Rs.', :south_assian_formatting => true) 
end 

Notez que le Money.new() accepte l'argent dans paise

0
def number_to_indian_currency(number) 
    if number string = number.to_s.split('.') 
    number = string[0].gsub(/(\d+)(\d{3})$/){ p = $2;"#{$1.reverse.gsub(/(\d{2})/,'\1,').reverse},#{p}"} 
    number = number.gsub(/^,/, '') + '.' + string[1] if string[1] # remove leading comma 
    number = number[1..-1] if number[0] == 44 
    end 
    "Rs.#{number}" 
end 

Exemple de sortie pour des combinaisons différentes

helper.number_to_indian_currency(2000)=> “Rs.2,000” 

    helper.number_to_indian_currency(2040)=> “Rs.2,040” 

    helper.number_to_indian_currency(1222040.54)=> “Rs.12,22,040.54” 
+0

Pourriez-vous s'il vous plaît expliquer à quoi sert cette ligne? 'nombre = nombre [1 ..- 1] si nombre [0] == 44'. –

1
def number_to_indian_currency(number) 
    if number.present? 
    string = number.to_s.split('.') 
    number = string[0].gsub(/(\d+)(\d{3})$/){ p = $2;"#{$1.reverse.gsub(/(\d{2})/,'\1,').reverse},#{p}"} 
    number = number.gsub(/^,/, '') + '.' + string[1] if string[1] # remove leading comma 
    number = number[1..-1] if number[0] == 44 
    end 
    "Rs.#{number}" 
end