我正在尝试创建一个简单的函数来在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?
答案 0 :(得分:9)
问题不在于你不能将Double转换为Int - round
完成那么好 - 这就是你试图对Int(padLength - length string
)进行除法。错误消息只是告诉您Int不是Fractional
的实例,是可以划分的数字的类型类。
通常,您可以使用fromIntegral (padLength - length string)
将其转换为Double,但在这种情况下,您可以直接使用整数除法:
center padLength string = padLength - (length string) `div` 2
a `div` b
只是一种更好的写作方式div a b
;你可以使用任何函数作为这样的二元运算符。
答案 1 :(得分:1)
你试图在整数类型的操作数上使用小数除法/
,但是没有定义。
您应该在分割之前将操作数转换为Double(使用fromIntegral
),或使用积分div
。