2011-11-28 13 views
41

¿Cómo puedo formatear un valor decimal en una cadena con un solo dígito después de la coma/punto y espacios iniciales para valores menores que 100?Formato de valor decimal a cadena con espacios iniciales

Por ejemplo, un valor decimal de 12.3456 se debe generar como " 12.3" con un espacio inicial único. 10.011 sería " 10.0". 123.123 es "123.1"

Busco una solución, que trabaja con la cadena de formato estándar/a medida, es decir

decimal value = 12.345456; 
Console.Write("{0:magic}", value); // 'magic' would be a fancy pattern. 

Respuesta

70

Este patrón {0,5:###.0} debería funcionar:

string.Format("{0,5:###.0}", 12.3456) //Output " 12.3" 
string.Format("{0,5:###.0}", 10.011) //Output " 10.0" 
string.Format("{0,5:###.0}", 123.123) //Output "123.1" 
string.Format("{0,5:###.0}", 1.123) //Output " 1.1" 
string.Format("{0,5:###.0}", 1234.123)//Output "1234.1" 
+0

¡Ciertamente sí! ¡Gracias! :) –

+3

¿Hay una buena referencia para esto? es decir, qué hace cada parte si mi caso de uso es ligeramente diferente. – tjrobinson

+4

@tjrobinson todo está en MSDN: http://msdn.microsoft.com/en-us/library/0c899ak8.aspx y http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx – nemesv

5
value.ToString("N1"); 

Cambiar el número de más decimales.

EDIT: Se perdió la bit de relleno

value.ToString("N1").PadLeft(1); 
+0

Gracias. Pero el uso de PadLeft no funcionará en mi caso, la cadena con el marcador de posición {0: ...} va a contener más texto que solo el valor decimal. –

+0

@Taz: debe escribir 'PadLeft (5) '. El parámetro es la longitud total de la cadena que se rellenará. – Jan

+0

@Jakob: ¿Por qué no puedes usar 'string.Format()'? – Jan

1

Todo lo anterior solución va a hacer el redondeo de decimales, por si acaso alguien está buscando una solución sin redondeo

decimal dValue = Math.Truncate(1.199999 * 100)/100; 
dValue .ToString("0.00");//output 1.99 
Cuestiones relacionadas