15
如果我在Haskell中有一个浮点数,我该如何测试它是否是整数。如何测试浮点数是否是haskell中的整数?
如果我在Haskell中有一个浮点数,我该如何测试它是否是整数。如何测试浮点数是否是haskell中的整数?
isInt x = x == fromInteger (round x)
> isInt 2
True
> isInt 2.5
False
而就在提醒:永远记住浮点数的全能骂道:
> isInt (0.1^2*200)
False
> 0.1^2*200
2.0000000000000004
好了,这是晚了一年,但我的修改的大风扇以上:
--Returns if x is an int to n decimal places
isInt :: (Integral a, RealFrac b) => b -> a -> Bool
isInt x n = (round $ 10^(fromIntegral n)*(x-(fromIntegral $ round x)))==0
所以,举例来说isInt 4.0001 3
回报True
但isInt 4.0001 4
回报False
。在10
附近运行它的值几乎总是足够精确,以至于浮动错误将再次成为您的问题;我通常使用7
。
很酷,有没有内置(出于好奇) – Peter 2009-07-22 09:43:05