Dezimalkonvertierung F # Skript vs. Kompiliertes F #

8

In F # Interactive funktioniert der folgende Code:

%Vor%

In einem kompilierten F # -Programm erscheint jedoch eine Fehlermeldung:

%Vor%

Was ist dort passiert? Liegt es daran, dass die verschiedenen Referenzen (und Versionen von Referenzen) zwischen F # Versionen verwendet werden? oder die internen Repräsentationen von decimal unterscheiden sich in kompilierten und interpretierten Modi.

    
Ming-Tang 08.11.2011, 01:51
quelle

3 Antworten

9

Dies liegt wahrscheinlich daran, dass Ihr F # -kompiliertes Programm auf .NET Framework 2.0 / F # 2.0 abzielt. F # interactive verwendet .NET Framework 4.0 / F # 4.0.

Das 2.0 Framework verwendet den BigInteger in FSharp.Core. Das 4.0 Framework verwendet System.Numerics.BigInteger . Der FSharp.Core hat nicht die Konvertierung in Dezimal.

Ändern Sie Ihr Projekt in .NET .NET 4.0 und fügen Sie einen Verweis auf System.Numerics hinzu, und alles sollte übereinstimmen.

    
vcsjones 08.11.2011, 03:16
quelle
2

Sie haben Recht, dass es eine gewisse Inkonsistenz gibt, ob BigInteger mit der Funktion decimal konvertiert werden kann oder nicht. Es scheint von der Version von .NET abhängig zu sein, für die Sie kompilieren. Wenn Sie den F # -Compiler (oder F # interaktiv) von Visual Studio 2010 verwenden, ist das Standardziel .NET 4.0. Für dieses Ziel funktioniert die Kompilierung gut:

%Vor%

Sie können das Zielframework ändern, indem Sie explizit auf die .NET 2.0-Version von mscorlib.dll und FSharp.Core.dll verweisen. Dann meldet der Compiler den von Ihnen beschriebenen Fehler:

%Vor%

Wenn Sie beim Kompilieren des Projekts den Fehler erhalten, ist Ihr Projekt wahrscheinlich so konfiguriert, dass es für .NET 2.0 kompiliert wird.

    
Tomas Petricek 08.11.2011 03:18
quelle
0

Gleiches Ergebnis

%Vor%     
BLUEPIXY 08.11.2011 09:25
quelle

Tags und Links