4

我有一个列表区域:: [双]。现在我想过滤这个列表中那些实际上是整数值的列表。我想为我的谓词做这样的事情:

isInteger :: Double -> Bool
isInteger x = abs (fromIntegral (floor x) - x) < delta
  where delta = 0.00001

但是,我想有更好的方法可以做到这一点。是否有用于检查实数值是否为整数的 Haskell 习语?

4

1 回答 1

7

尽管您可能想要使用round而不是floor. 您还可以考虑使用approxRational并检查结果的分母是1

isInteger x = denominator (approxRational x 0.00001) == 1
于 2012-06-23T22:59:08.060 回答