There is no built in method to do this. However, using Ruby's open classes, you can add this to the Float class.
There's a simple, one-liner way to do this. The Float#floor method will return the largest integer equal to or less than the floating point value. In other words, the integer portion of the number. Subtract this from the number the floating point number to get the fractional portion. If the fractional portion is 0, return just the integer.
#!/usr/bin/env ruby class Float def to_i_if if self - floor == 0 floor else self end end end
You may also want to add a threshold parameter. Floating point numbers are not always that accurate, so the fractional portion may not equal exactly zero. This will handle situations like 3.000002, where the fractional portion is so insignificant it can be ignored.
The following is an example IRB session demonstrating the usage.
#!/usr/bin/env ruby class Float def to_i_if(threshold=0) if self - floor <= threshold floor else self end end end
irb(main):001:0> load 'float_round.rb' => true irb(main):002:0> 1.0.to_i_if => 1 irb(main):003:0> 1.0001.to_i_if => 1.0001 irb(main):004:0> 1.0001.to_i_if(0.001) => 1