2011-02-01 19 views
16

Tengo algunos valores flotantes que quiero convertir a una cadena, quiero mantener el mismo formato al convertir, es decir, 999.0000 (float) -> 999.0000 (String). Mi problema es cuando los valores contienen un número arbitrario de ceros después del punto decimal, como en el ejemplo anterior, se quitan cuando se convierte en una cadena, por lo que el resultado que realmente encuentro es 999.Especificador de formato de flotante a cadena

Miré en los especificadores de formato para el método toString() en MSDN, el especificador RoundTrip ('R') parece que producirá lo que quiero, pero solo es compatible con las variables Single, Double y BigInt. ¿Hay un especificador de formato como este para las variables de flotación? ¿O sería más fácil simplemente convertir los valores en dobles?

ACTUALIZACIÓN: Para mayor claridad, la razón por la que quiero mantener los ceros finales es porque estoy haciendo una comparación de decimales, es decir, estoy comparando el número de dígitos después del lugar decimal entre dos valores. Entonces, por ejemplo, 1.00 y 1.00000 tienen un número diferente de dígitos después del punto decimal. Sé que es una solicitud extraña, es por trabajo y el requisito viene de muy alto.

ACTUALIZACIÓN 2-3-11:

Estaba pensando en esto demasiado duro, estoy leyendo los números de un archivo txt y luego analizar como flotadores, voy a modificar el programa para comprobar si los valores de cadena son decimales o números enteros. Perdón por perder su tiempo, aunque esto fue muy perspicaz.

+0

el número de dígitos después del punto decimal?si desea mantener esa dinámica, suponiendo que el valor es flotación correcta, utilice .ToString ("G") –

+0

Los dígitos variarán, para mantenerlo simple, diría que el rango de dígitos después del punto decimal puede estar en cualquier lugar entre 1 y 5. – kingrichard2005

+0

.ToString ("G") es mejor para el rango variable –

Respuesta

24

primer lugar, como Etienne says, float en C# esSingle. Es solo la palabra clave C# para ese tipo de datos.

Así que sin duda puede hacer esto:

float f = 13.5f; 
string s = f.ToString("R"); 

En segundo lugar, se ha referido un par de veces a "formato" de la serie; los números no tienen formatos, solo tienen valores. Las cadenas tienen formatos. Lo que me hace preguntarme: ¿qué es lo que tienes que tiene un formato pero no es una cadena? Lo más parecido que puedo pensar sería decimal, que tiene mantener su propia precisión; sin embargo, llamar simplemente al decimal.ToString debería tener el efecto que desee en ese caso.

¿Qué le parece incluir un código de ejemplo para que podamos ver exactamente lo que está haciendo y por qué no está logrando lo que desea?

+2

Nota rápida: en los campos científicos, es común distinguir "1.01e5" y "1.0100e5", ya que el número de ceros finales contribuye al número de dígitos significativos, lo que expresa la precisión de una medición. –

4

En C#, float es un alias para System.Single (un poco como int es un alias para System.Int32).

+6

Haha, "un poco como" -buena;) –

38

Uso ToString() con este formato:

12345.678901.ToString("0.0000"); // outputs 12345.6789 
12345.0.ToString("0.0000"); // outputs 12345.0000 

poner tanto cero como sea necesario al final del formato.

+0

Hola, Aliostad, el problema es que quiero que la cadena se formatee exactamente como se formatea el número. Para su segundo ejemplo, me gustaría que fuera "12345.0" como una cadena, no como "12345.0000". – kingrichard2005

+0

@ kingrichard2005- ¿qué información te dice si el flotador es 12345.0 o 12345.0000? Serían equivalentes como flotadores. –

+0

Estoy leyendo estos archivos desde un archivo txt. Quizás una mejor opción sería determinar si el número leído como una cadena es un número decimal o no. – kingrichard2005

Cuestiones relacionadas