[英]Converting between types in Haskell
我正在尝试创建一个简单的函数来在Haskell中返回一个居中的文本字符串,但是我很难找到插入任何一侧的填充量。 我有这个:
center padLength string = round ((padLength - (length string)) / 2)
这给出了以下错误:
No instance for (Fractional Int)
arising from a use of '/'
Possible fix: add an instance declaration for (Fractional Int)
In the first argument of 'round', namely
'((padLength - (length string)) / 2)'
In the expression: round ((padLength - (length string)) / 2)
In an equation for `center':
center padLength string = round ((padLength - (length string)) / 2)
我如何(基本上)从Double(我认为)转换为Int?
问题不在于你不能将Double转换为Int - round
来完成那么好 - 这就是你试图在Int( padLength - length string
)上进行除法。 错误消息只是告诉您Int不是Fractional
的实例, Fractional
是可以划分的数字的类型类。
通常,您可以使用fromIntegral (padLength - length string)
将其转换为Double,但在这种情况下,您可以直接使用整数除法:
center padLength string = padLength - (length string) `div` 2
a `div` b
只是写div ab
一种更好的方式; 你可以使用任何函数作为这样的二元运算符。
你试图在整数类型的操作数上使用小数除法/
但是没有定义。
您应该在分割之前将操作数转换为Double(使用fromIntegral
),或者使用整数除法div
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.