2009-07-22 82 views

回答

24
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 
+0

很酷,有没有内置(出于好奇) – Peter 2009-07-22 09:43:05

15

好了,这是晚了一年,但我的修改的大风扇以上:

--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回报TrueisInt 4.0001 4回报False。在10附近运行它的值几乎总是足够精确,以至于浮动错误将再次成为您的问题;我通常使用7

相关问题