From: Dale Martenson Date: 2006-11-17T07:48:11+09:00 Subject: Re: Is 2.0 Integer or Float? Paul Lutus wrote: > Bernard Kenik wrote: > >>> the :integer method returns false in this case. >>> What would be a good way to write a different method to check? >>> >> x.class => Float 2.0 is a float not an integer > > The OP is trying to establish whether the _content_ of the float > variable is > an integer, not whether the variable has float type. That is relatively > easy to establish. Sorry to join this conversation late, but to me this is a strange question. Floats are never integers. Integers are counting numbers with exact values over a certain range determined by their internal representation. While floating point numbers are approximations which suffer from errors of precision. They may approach an integer bound and yet never achieve it. So the question is what approximation is adequate to say that a float is the integer that it approaches. What is close enough? Example: irb(main):124:0> def is_integer(f) irb(main):125:1> ((f.ceil - f).remainder(1).abs < 0.0000000001) or ((f.floor - f ).remainder(1).abs < 0.0000000001) irb(main):126:1> end => nil irb(main):127:0> n = 0.1 => 0.1 irb(main):128:0> 100.times { puts "#{n} is a integer: #{is_integer(n)}"; n += 0. 1 } 0.1 is a integer: false 0.2 is a integer: false 0.3 is a integer: false 0.4 is a integer: false 0.5 is a integer: false 0.6 is a integer: false 0.7 is a integer: false 0.8 is a integer: false 0.9 is a integer: false 1.0 is a integer: true 1.1 is a integer: false 1.2 is a integer: false 1.3 is a integer: false 1.4 is a integer: false 1.5 is a integer: false 1.6 is a integer: false 1.7 is a integer: false 1.8 is a integer: false 1.9 is a integer: false 2.0 is a integer: true 2.1 is a integer: false 2.2 is a integer: false 2.3 is a integer: false 2.4 is a integer: false 2.5 is a integer: false 2.6 is a integer: false 2.7 is a integer: false 2.8 is a integer: false 2.9 is a integer: false 3.0 is a integer: true 3.1 is a integer: false 3.2 is a integer: false 3.3 is a integer: false 3.4 is a integer: false 3.5 is a integer: false 3.6 is a integer: false 3.7 is a integer: false 3.8 is a integer: false 3.9 is a integer: false 4.0 is a integer: true 4.1 is a integer: false 4.2 is a integer: false 4.3 is a integer: false 4.4 is a integer: false 4.5 is a integer: false 4.6 is a integer: false 4.7 is a integer: false 4.8 is a integer: false 4.9 is a integer: false 5.0 is a integer: true 5.1 is a integer: false 5.2 is a integer: false 5.3 is a integer: false 5.4 is a integer: false 5.5 is a integer: false 5.6 is a integer: false 5.7 is a integer: false 5.8 is a integer: false 5.9 is a integer: false 5.99999999999999 is a integer: true 6.09999999999999 is a integer: false 6.19999999999999 is a integer: false 6.29999999999999 is a integer: false 6.39999999999999 is a integer: false 6.49999999999999 is a integer: false 6.59999999999999 is a integer: false 6.69999999999999 is a integer: false 6.79999999999999 is a integer: false 6.89999999999999 is a integer: false 6.99999999999999 is a integer: true 7.09999999999999 is a integer: false 7.19999999999999 is a integer: false 7.29999999999999 is a integer: false 7.39999999999999 is a integer: false 7.49999999999999 is a integer: false 7.59999999999999 is a integer: false 7.69999999999999 is a integer: false 7.79999999999999 is a integer: false 7.89999999999999 is a integer: false 7.99999999999999 is a integer: true 8.09999999999999 is a integer: false 8.19999999999999 is a integer: false 8.29999999999999 is a integer: false 8.39999999999999 is a integer: false 8.49999999999999 is a integer: false 8.59999999999999 is a integer: false 8.69999999999999 is a integer: false 8.79999999999998 is a integer: false 8.89999999999998 is a integer: false 8.99999999999998 is a integer: true 9.09999999999998 is a integer: false 9.19999999999998 is a integer: false 9.29999999999998 is a integer: false 9.39999999999998 is a integer: false 9.49999999999998 is a integer: false 9.59999999999998 is a integer: false 9.69999999999998 is a integer: false 9.79999999999998 is a integer: false 9.89999999999998 is a integer: false 9.99999999999998 is a integer: true -- Posted via http://www.ruby-forum.com/.