我有一个列表区域:: [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/