Test integerness: Difference between revisions
Content added Content deleted
(→{{header|Haskell}}: Added Haskell solution) |
(→{{header|Ruby}}: Added testcases conform suggested improvements.) |
||
Line 1,306: | Line 1,306: | ||
=={{header|Ruby}}== |
=={{header|Ruby}}== |
||
{{improve|Ruby|This method appears to support arbitrarily large floats, as well as special float values like NaN and infinity, but doesn't demonstrate it. Some test-cases should probably be added. (See the recommended test-cases in the task description.)}} |
|||
Testing for integerness of floats, rationals and complex numbers: |
Testing for integerness of floats, rationals and complex numbers: |
||
Line 1,314: | Line 1,312: | ||
def integer? |
def integer? |
||
self == self.to_i rescue false |
self == self.to_i rescue false |
||
end |
end |
||
end |
end |
||
# Demo |
# Demo |
||
ar = [ |
ar = [25.000000, 24.999999, 25.000100, -2.1e120, -5e-2, |
||
Float::NAN, Float::INFINITY, |
|||
2r, 2.5r, # rationals |
|||
2+0i, 2 + 0.0i, 5-5i] |
|||
ar.each{|num| puts "#{num} integer? #{num.integer?}" } |
ar.each{|num| puts "#{num} integer? #{num.integer?}" } |
||
</lang> |
</lang> |
||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
25.0 integer? true |
|||
24.999999 integer? false |
|||
25.0001 integer? false |
|||
-2.1e+120 integer? true |
|||
-0.05 integer? false |
|||
NaN integer? false |
|||
Infinity integer? false |
|||
2/1 integer? true |
2/1 integer? true |
||
5/2 integer? false |
5/2 integer? false |
||
2+0i integer? true |
2+0i integer? true |
||
2+0. |
2+0.0i integer? false |
||
5-5i integer? false |
|||
</pre> |
</pre> |
||
Ruby considers 2+0.0i to be inexact and raises an exception when the to_i method attempts to convert it to an integer. 2+0i is exact and converts to integer. |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |