2016-05-13 18 views
1

Ich habe eine Funktion, die ein Doppel als Eingabe dauert, aber ich muss ein Int übergeben und es gibt mir diesen Fehler:Wie konvertiert man von Int zu Double?

keine Instanz für keine Instanz für (Fractional Int) aus einer Verwendung von '/ '

Hier sind meine Funktionen:

foo1 :: Int -> Int 
foo1 x1 = foo2 (x1 + 1) 

foo2 :: Double -> Int 
foo2 x = round (((3244325 * x^343)/2352352656) - ((3432 * x^234)/45324645500) + ((23453 * x^21)/2534743435) 

ich bin nicht sicher, wie dieses Problem zu bekommen.

Ist so etwas wie die folgenden sind:

foo1 :: Int -> Int 
foo1 x1 = foo2 $ convertToDouble $ (x1 + 1) 
+0

Ich weiß nicht über Haskell, aber ich habe das gefunden; Überprüfen Sie, ob es hilft: "Der übliche Weg, ein Int in ein Double zu konvertieren, ist fromIntegral, das den Typ (Integral a, Num b) => a -> b hat. Dies bedeutet, dass es einen Integral-Typ (Int und Integer) zu jedem numerischen Typ b, von dem Double eine Instanz ist. " –

Antwort

3

Verwendung fromIntegral:

(Integral a, Num b) => a -> b 

Es wird ein integraler Typ umwandeln (das heißt ein Int, Integer usw.) in einen anderen Typ Num.

+0

keine intuitive name haha ​​ – user6005857

+2

@ user6005857 warum? Wahrscheinlich wirst du * nur * gebraucht, um zu sagen, wohin du gehen willst, anstatt wo du herkommst - aber wenn der Compiler das Ziel bereits kennt ... – Carsten

+0

Stimmt, es macht Sinn. – user6005857

Verwandte Themen