2011-01-18 1 views
2

У меня есть номер, как 100000Rails Количество в формат функции преобразования валюты

когда я пользователь number_to_currency (100000)

это дать - 100000,00

, но как я могу получить формат, как 1,00,000.00

как $ 100 000 выглядит неплохо, но показывать его в Rs мне нужны сепараторы (','), как это - 1,00,00,000.00

+1

Что 1,00,00,000.00 значит? Верие странное число, по крайней мере для меня. Это непросто читать. – klew

+0

А что такое Rs? – klew

+0

Индийские рупии отформатированы таким образом, например. $ 100 000 000 представлены как рупий 10,00,00,000, поэтому .. – rtdp

ответ

5

контроля 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

есть gem-релиз его 'number_to_indian_currency', который поддерживает' форматирование', а также 'css для символа рупии' –

0

Я бы предложил написать свой собственный чтобы выполнить это форматирование отображения, а не переписывать number_to_currency. Вы могли бы назвать это r_number_to_currency или что-то вроде этого и поместить его в помощник вида приложения.

0

Да Пан, я написал помощник для этого ...

Что-то вроде этого -

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 

, который при переходе 1000000. дает мне "Rs 10,00,000"

Спасибо.

1

Я знаю, что это поздний ответ.

But (RubyMoney) [https://github.com/RubyMoney/money] имеет опцию форматирования для южной азии (также может использоваться для Индии).

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

Обратите внимание, что Money.new() принимает деньги в пайса

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 

Пример вывода для различных комбинаций

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

Не могли бы вы объяснить, для чего эта линия? 'number = number [1 ..- 1] если номер [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 
Смежные вопросы