2015-03-12 1 views
1

gars s'il vous plaît me dire pourquoi cela ne compilecompilation printf dans haskell

putStrLn("The average number of fans for the films of " ++ actor ++ " is : " ++ printf "%.2f\n" (show(countAveFans actor testDatabase)) 

Son à simple mais je ne peux pas penser pourquoi il ne marche pas work.I essayer de convertir le tout à chaîne et prendre la 2 décimales Point impression out.Thanks

+0

Vous pourrait vouloir éviter 'printf'. C'est plutôt bizarre. – dfeuer

+2

Mais si vous voulez l'utiliser, vous devriez probablement l'utiliser pour toute la chaîne: 'putStrLn $ printf" La moyenne ... films de% s est:% .2f "acteur (countAveFans actor testDatabase)' – dfeuer

+0

@dfeuer If vous l'utilisez pour toute la chaîne, notez que 'printf ...' peut aussi être utilisé comme une action 'IO', donc vous n'avez pas besoin de' putStrLn'. (Bien que vous ayez besoin alors d'un '\ n 'supplémentaire.) Cependant, je suspecte que l'employer sur la chaîne entière est réellement moins efficace, parce qu'il doit alors analyser à l'exécution les parties de la chaîne qui ne contiennent pas'% 's ... –

Répondre

7

Vous devez fournir un RealFloat au lieu d'un String-printf supprimer ainsi l'appel à show:

putStrLn $ "The average number of fans for the films of " ++ actor ++ " is : " ++ (printf "%.2f\n" $ countAveFans actor testDatabase) 
+0

Merci un million :). –