Search code examples
ruby-on-railsruby-on-rails-4floating-pointdecimalrails-console

Calculating a simple decimal in rails console using postgresql


Ok...I think I'm missing something very obvious here but haven't been able to google myself through this solution. I have two simple rails methods that calculate the number of up votes and down votes. They will always return a fraction because i'm trying to show a percentage (up_vote_count / votal_vote_count). I open the rails console and run the following:

y = @somespecificrecord

then...

y.up_vote_count

This returns 1 as is expected

y.down_vote_count

This returns 1 as is expected

y.total_vote_count

This returns 2 as is expected.

However, when I run in the console...

y.up_vote_count / y.total_vote_count

This returns 0 when it should return .50. I've been reading about floats/integers/decimals, etc and I do see this in the schema on the model i'm working from:

t.float "value", default: 0.0

Is this my problem?...and if so what do I have to do to allow myself to do a simple formula like the one above in rails console that will return the correct decimal rounded to 2 digits (i.e, .50 in this case above). I don't know if I want to run any migrations to change data types because this is a gem (& as a beginner I tend to stay away from customizing code from any gems I'm using). Is there another way? something small i'm missing hopefully?

UPDATE: I'm learning decimals are slower than floats also, so is there any way to accomplish this with continuing to use t.float "value", default: 0.0

thanks for any help.


Solution

  • 1 / 2 = 0.5 
    

    With integers this will round down to 0

    You can get around this by casting the divisor to a float, forcing it to do division with floating point accuracy.

    y.up_vote_count / y.total_vote_count.to_f