2011-01-28 88 views
10

如何將float轉換爲F#中的字符串。我在尋找與此簽名的函數:將浮點數轉換爲F#中的字符串?

float -> string

+2

這實際上取決於你希望得到的字符串看起來如何。它可能比你想象的更微妙:-) – 2011-01-29 00:06:12

回答

12
> sprintf "%f";; 
val it : (float -> string) = <fun:[email protected]> 
+0

<拍額>感謝。 – Ramy 2011-01-28 22:39:27

+0

由於某種原因無法選擇11分鐘的答案。所以......我忘了一天。 – Ramy 2011-01-29 23:01:41

3
string;; 
val it : (obj -> string) = <fun:[email protected]> 
+0

簽名在這裏是欺騙性的,因爲`string`是一個內聯的靜態優化函數,當與float一起使用時,轉換成類似`let x = 3.2 in(#「」x:float#)。ToString(「g」, System.Globalization.CultureInfo.InvariantCulture)`。像'(string:float-> string)'這樣的簽名是我想的一個更​​好的例子。 – 2011-01-28 23:49:41

+0

我同意。 MSDN也將其列爲鑄造操作員。 http://msdn.microsoft.com/en-us/library/dd233220.aspx我想大多數人會想使用sprintf「%f」,所以你可以格式化你想要的浮動。 – gradbot 2011-01-28 23:58:17

8

使用 '串' 功能。

string 6.3f 
+2

此外,您還有其他具有函數「int」,「uint32」,「float32」,「byte」,「char」,「decimal」等基本類型的等價轉換函數。 – Stringer 2011-01-28 23:00:39

2

只是爲了圓了答案:

(fun (x:float) -> x.ToString()) 

:)

23

正如其他人指出的那樣,有幾個選項。最簡單的兩種方法是調用ToString方法並使用string函數。兩者之間有一個細微的差別,你應該知道。這是他們做什麼,我的系統上:

> sprintf "%f" 1.2;; 
val it : string = "1.200000" 
> string 1.2;; 
val it : string = "1.2" 
> 1.2.ToString();; 
val it : string = "1,2" 

前兩個是不同的,但兩者是有意義的,但爲什麼赫克做的最後一回「1,2」?

那是因爲我在那裏小數點寫成逗號(DOH!)所以,string函數使用不變的文化,而ToString使用當前區域性(線程)捷克區域設置。在一些奇怪的文化(如捷克:-))這可能會導致麻煩!您也可以明確地與ToString方法指定此:

> 1.2.ToString(System.Globalization.CultureInfo.InvariantCulture);; 
val it : string = "1.2" 

因此,該方法可能會取決於你想如何使用字符串的選擇 - 爲演示文稿,你應該尊重OS設置,但產生便攜式文件,你可能想要不變的文化。