2008-10-25 19 views
6

Wie kann ich einen Int64 in einen Int32 Typ in F # konvertieren, ohne die Microsoft.FSharp.Compatibility.Int32.of_int64 zu verwenden?F # int64 zu int

ich das tue, weil interaktive nicht zu funktionieren scheinen, wenn ich versuche:

open Microsoft.FSharp.Compatibility 

Mit FSharp.PowerPack als Referenz hinzugefügt heißt es:

Fehler FS0039: Der Namespace ‚Kompatibilität ' ist nicht definiert.

Edit: Hat jemand eine Antwort auf die Frage haben? Die Vorschläge zu den int-Typen sind nützlich und informativ, aber ich habe das gleiche Problem beim Öffnen des powerpack-Namensraums in F # interactive.

Antwort

15

F # 1.9.6 hat eine Typkonvertierungsfunktion, so dass Sie dies tun können:

let num = 1000 
let num64 = int64(num) 
10

Beachten Sie, dass bei dieser Art der Umwandlung, wenn Sie die Größe eines Wertes zu reduzieren, werden die höchstwertigen Bytes weggeschmissen , so könnten Ihre Daten abgeschnitten werden:

> let bignum = 4294967297L;; 
val bignum : int64 

> let myint = int32(bignum);; 
val myint : int32 

> myint;; 
val it : int32 = 1 
1

Beachten Sie, dass die Funktionen für die gleichen Namen wie die Typen selbst und definiert in der Bibliothek spec (siehe unten) zu jedem integer-Typ zu konvertieren. (Mit der Veröffentlichung des CTP (1.9.6.2), ein großer Teil der Bibliothek und die Namensräume ein wenig veränderten im Vergleich zu früheren Versionen, aber es wird wahrscheinlich mehr ‚stabil‘ sein voran.)

http://research.microsoft.com/fsharp/manual/FSharp.Core/Microsoft.FSharp.Core.Operators.html

+0

Die Verbindung ist unterbrochen. –