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

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

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

最佳答案

这对我来说看起来很好而且很惯用,尽管您可能想使用 round 而不是 floor 。您还可以考虑使用 approxRational 并检查结果的分母是否为 1 :

isInteger x = denominator (approxRational x 0.00001) == 1

关于haskell - 测试 Double 是否是 Haskell 中的整数值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11173642/

10-14 18:04
查看更多