这段代码的工作原理:
posToXY :: Float -> Float -> Integer
posToXY a b = do
let y = a / b
round y
但这不起作用:
posToXY :: Integer -> Integer -> Integer
posToXY a b = do
let y = a / b
round y
我知道操作“/”没有为整数类型定义,但我不知道如何修复代码以使用整数参数。
如果你想执行分数除法,你可以从任何转换Integral
类型使用fromIntegral
, or fromInteger
仅转换自Integer
具体来说。
其他数字类型类也有类似的函数:toRational
, fromRational
, realToFrac
等等。当然,您可以使用以下命令将小数类型转换回整数类型round
, floor
, ceiling
,或类似的。
最后,如果你真的想要integer除法,而不是分数除法然后四舍五入,有div
and quot
函数(取决于您想要的截断行为)。
另外,你可能应该将你的函数写成类似的东西posToXY a b = round $ a / b
。不必要的do
并且多行使得阅读变得更加困难。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)