2011-01-28 13 views
10

Cómo convierto un flotador en una cadena en F #. Busco una función con esta firma:convertir un flotador a cadena en F #?

float -> string

+2

Realmente depende de cómo quiera que se vea la cadena resultante. Puede ser más sutil de lo que piensas :-) –

Respuesta

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

gracias. – Ramy

+0

no pudo seleccionar la respuesta durante 11 minutos por algún motivo. Entonces ... me olvidé de eso por alrededor de un día. – Ramy

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

La firma es engañosa aquí, ya que 'string' es una función en línea optimizada estáticamente y, cuando se usa con float, se traduce en algo como' let x = 3.2 in (# "" x: float #). ToString ("g", System.Globalization.CultureInfo.InvariantCulture) '. Restringir la firma como '(string: float-> string)' es una mejor ilustración, creo. –

+0

Estoy de acuerdo. MSDN también lo lista como el operador de casting. http://msdn.microsoft.com/en-us/library/dd233220.aspx Me imagino que la mayoría de la gente querría usar sprintf "% f" para que pueda formatear el flotador como lo desee. – gradbot

8

Utilice la función de 'cadena'.

string 6.3f 
+2

Además tiene una función de conversión equivalente para otros tipos básicos con las funciones 'int',' uint32', 'float32',' byte', 'char',' decimal', etc. – Stringer

2

Sólo para redondear las respuestas:

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

:)

+0

Esto fue divertido respondiendo solo para ver qué tan rápido otros publicarían y votarían. – gradbot

+2

También podría agregar 'System.Convert.ToString' si está tratando de completar las respuestas;) – Jimmy

+0

@gradbot: Fue respondida rápidamente, pero todas las respuestas ignoraron los aspectos sutiles de las culturas divertidas :-)! –

23

Como otros señalaron, hay algunas opciones. Los dos más simples están llamando al método ToString y usando la función string. Hay una sutil diferencia entre los dos que debes tener en cuenta. Aquí es lo que hacen en mi sistema:

> 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" 

Los dos primeros son diferentes, pero ambos tienen sentido, pero ¿por qué diablos hizo la última vuelta "1,2"?

Eso es porque tengo configuraciones regionales checas donde el punto decimal está escrito como coma (doh!) Entonces, la función string usa la cultura invariable mientras que ToString usa la cultura actual (de un hilo). En algunas culturas raras (como checo :-)) ¡esto puede causar problemas! También se puede especificar de forma explícita con el método ToString:

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

Por lo tanto, la elección del método dependerá probablemente de cómo desea utilizar la cadena - para su presentación, se debe respetar la configuración del sistema operativo, pero para generar archivos portátiles, es probable que desee una cultura invariable.

+0

Buen punto, tengo "1,2" también :). Dato curioso: las culturas extrañas casi estancaron el desarrollo de ALGOL según [wikipedia] (http://en.wikipedia.org/wiki/Decimal_mark "Decimal mark"). – Stringer

+0

Hay otra diferencia entre la función 'string' y el método' ToString'. Intenta aplicarlos a 'null' y' None'. Mientras 'string' siempre devuelve una cadena vacía, el método' ToString' falla. –