dem*_*mas 19 floating-point haskell integer
此代码有效:
posToXY :: Float -> Float -> Integer
posToXY a b = do
let y = a / b
round y
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
posToXY :: Integer -> Integer -> Integer
posToXY a b = do
let y = a / b
round y
Run Code Online (Sandbox Code Playgroud)
据我所知,操作"/"没有定义整型,但我不知道如何解决代码整数参数来工作.
C. *_*ann 28
如果要执行小数除法,可以Integral
使用任何类型转换fromIntegral
,或fromInteger
仅转换为Integer
特定类型.
有与其他数字类型类类似的功能:toRational
,fromRational
,realToFrac
等等.当然,你可以使用转换小数类型回整型round
,floor
,ceiling
,或者这样的.
最后,关于你实际上想要整数除法的概率,而不是后续舍入的小数除法,有div
和quot
函数(取决于你想要的截断行为).
另外,你可能应该把你的函数写成类似的东西posToXY a b = round $ a / b
.不必要的do
多行使得阅读更加困难.
您可以使用fromIntegral
将任何Integral类型转换为任何Num类型.所以:
let y = fromIntegral a / fromIntegral b
Run Code Online (Sandbox Code Playgroud)
您的代码可以轻松简化为
posToXY :: Float -> Float -> Integer
posToXY a b = round (a / b)
Run Code Online (Sandbox Code Playgroud)
然后
posToXY :: Integer -> Integer -> Integer
posToXY a b = round (fromIntegral a / fromIntegral b)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26949 次 |
最近记录: |