123 * 3 => 123123123! But why?


#1

Hi all

I extended the Globalize Plugin the following way:


module Globalize
class Currency
def conversion_rate
code = Locale.active.currency_code
rates = { :USD => 1,
:CHF => 0.75,
:EUR => 1.1,
:GBP => 3.1
}
value = rates[code.to_sym]
raise “No conversion rate found for currency ‘#{code}’
(#{Locale.active.language.english_name})!” if value.nil?
value
end

def dollar_part
  na? ? nil : cents / 100 / conversion_rate
end

def cent_part
  na? ? nil : cents % 100 / conversion_rate
end

end
end

Sadly I get ugly results like

$99.00 # correct!
SFr. 132,0.00 # incorrect!
â?¬ 90,0,00 # incorrect!

I don’t know why Ruby concatenates the values and does not multiply
them… How can I fix that?

Thanks for help. :slight_smile:
Greetings, Josh


#2

you are multiplying a string, not a number. Try using .to_f (to float)
method


#3

If you’re finding that 123 * 3 == 123123123, that’s almost certainly
because your 123 is actually ‘123’, i.e. a String. You’ll need to
ensure that the value you are operating on is a Numeric by converting
it…

  • james

#4

Joshua M. wrote:

It seems that it’s another problem… I have to round the value to a
number without digits after the comma…

1234.2456256 should become 1234

How can i round integer values?

value.round will round to the nearest integer (only works for floats)
value.to_i will truncate the float part off without rounding.

_Kevin


#5

It seems that it’s another problem… I have to round the value to a
number without digits after the comma…

1234.2456256 should become 1234

How can i round integer values?


#6

Thank you, it’s working great now. :slight_smile: