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 次 |
| 最近记录: |