在Haskell中打印时将Float格式化为Int

时间:2016-09-01 14:19:00

标签: haskell printing int format

这个Haskell程序打印“1.0”如何让它打印“1”?

fact 0 = 1
fact x = x * fact (x-1)

place m n = (fact m) / (fact n) * (fact (m-n))

main = do   
   print (place 0 0)

2 个答案:

答案 0 :(得分:10)

通过使用/操作,您要求haskell使用小数数据类型。在这种情况下,你可能不想要那个。最好使用整数类型,例如IntInteger。所以我建议你做以下事情:  1.为fact函数添加类型声明,例如fact :: Integer -> Integer  2.使用quot代替/

所以你的代码应该是这样的:

fact :: Integer -> Integer
fact 0 = 1
fact x = x * fact (x-1)

place :: Integer -> Integer -> Integer
place m n = (fact m) `quot` (fact n) * (fact (m-n))

main = do   
   print (place 0 0)

另外,正如@leftaroundabout指出的那样,您可能希望使用更好的算法来计算这些二项式数。

答案 1 :(得分:2)

您可以使用round

print (round $ place 0 0)

这会将格式更改为您想要的格式。然而,redneb的答案是正确的方法。