Number_to_currency UK pounds


#1

I work in the UK and therefore most of my currency figures will be in UK
pounds. I realise that to format a number to a currency format I can
use:

number_to_currency(amt, :unit => “£”)

but it would be more convenient to set £ as the default currency symbol.
What is the best way to do that?

Should I edit line 39 of this file:

C:\ruby\lib\ruby\gems\1.8\gems\actionpack-1.11.2\lib\action_view\helpers\number_helper.rb

so that options.delete(“unit”) { “$” } becomes options.delete(“unit”) {
“£” }

or is there a better way?

Can I set £ as the default at the web application level? An addition to
the \app\helpers within the website files?

I am a newbie to Ruby and Rail. (working my way through “Agile Web
Development with Rails”), so more interested in best practice that quick
fix.


#2

I’ve created a helper method like this

Displays a textual representation of +number+ in british pound

format (i.e.:

“£1,359.56”).

def number_to_currency_gbp (number)
number_to_currency(number, { :unit => “£”})
end

So just call number_to_currency_gbp

Hope that helps
Harvey


#3

Thank you Harvey. I’d come up with something similar:

def fmt_pounds(amt)
number_to_currency(amt, :unit => “£”)
end

Perhaps I should be happy with that, but it seems neater to me to use
the built in helper, and alter the default.

OK - I’ve copied the number_to_currency code from number_helper.rb to
application_helper.rd in my web application. I then edited it so the
code looks like this:

def number_to_currency(number, options = {})
options = options.stringify_keys
precision, unit, separator, delimiter = options.delete(“precision”) { 2
}, options.delete(“unit”) { “£” }, options.delete(“separator”) { “.” },
options.delete(“delimiter”) { “,” }
separator = “” unless precision > 0
begin
parts = number_with_precision(number, precision).split(’.’)
unit + number_with_delimiter(parts[0], delimiter) + separator +
parts[1].to_s
rescue
number
end
end

Now within the application number_to_currency(10.3) produces £10.30.
Which is what I want. Is this good practice? Have I broken anything?


#4

Rob

The way I suggested seems to be the cleanest solution to me. I
personally don’t like the idea of copying Rails code into your own
application. I would have thought that it may cause your maintanability
problems in the future. I’m a newbie to Rails myself so there maybe a
neater way to alter the default but I don’t know what it is. Let me
know if you find a better solution.

Regards
Harvey


#5

Harvey B. wrote:

I personally don’t like the idea of copying Rails code into your own
application.

I agree. I’m sure I can adjust the way the function behaves without
rewriting all the code. In a couple of places “The Programming Ruby
Guide” (http://www.rubycentral.com/book/index.html) discusses changing
or adding functionality for inbuilt methods and classes. However, with
this example I’m not sure how to do that.

I’m sure there is a neater way of doing this.

Thanks again for your help