2011-01-28 92 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设置,但产生便携式文件,你可能想要不变的文化。