将Int除以Int并返回Int


79

我需要一个获取两个Ints(ab)并返回A/BInt。我确定那A/B将永远是整数。

这是我的解决方案:

myDiv :: Int -> Int -> Int
myDiv a b = 
      let x = fromIntegral a
          y = fromIntegral b
      in truncate (x / y)

但是想找到更简单的解决方案。像这样:

myDiv :: Int -> Int -> Int
myDiv a b = a / b

如何将Int除以Int并获取Int?

Answers:


140

为什么不只是使用quot

quot a b

是截断为零的整数a和b的整数商。


7
还是a `quot` b对infix爱好者(哇,实际上可以用反斜杠转义那些带有反斜线的反引号吗?)

38
a `div` b; 如果我没记错的话,会quot截断(像想要的demas一样),然后div四舍五入为零。所以(-3) `quot` 4 == 0(-3) `div` 4 == -1
Antal Spector-Zabusky 2010年

5
为+1 divquot当周围存在负数时,从数学上讲,这是个a子。
luqui 2010年

这对我来说是个救命稻草。我在fromIntegral (ceiling (int1 / int2))和其他事情搏斗-没有一件东西给了我Int,但是这件事情确实给了我。
MuffinTheMan 2013年

10
div四舍五入为负无穷大,而不是零。
Lacuno

1

这是我要做的自己的事情:

quot' a b
         | a<b = 0  -- base case
         | otherwise = 1 + quot' a-b b

2
作为练习很好,但是在生产中没有用。数量较多时,速度较慢(线性时间),并且内存占用量较高(不是尾递归)。对于负数,它是错误的(a<0)或永不结束(b<0)。
Ruud Helderman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.