C# Double: formato ToString() con dos decimales pero sin redondeo

Resuelto kjv asked hace 14 años • 15 respuestas

¿Cómo formato a Doublea Stringen C# para tener solo dos decimales?

Si uso String.Format("{0:0.00}%", myDoubleValue)el número, entonces se redondea y quiero un truncamiento simple sin ningún redondeo. También quiero que la conversión Stringsea sensible a la cultura.

kjv avatar Mar 16 '10 18:03 kjv
Aceptado

Yo uso lo siguiente:

double x = Math.Truncate(myDoubleValue * 100) / 100;

Por ejemplo:

Si el número es 50.947563 y utilizas el siguiente, sucederá lo siguiente:

- Math.Truncate(50.947563 * 100) / 100;
- Math.Truncate(5094.7563) / 100;
- 5094 / 100
- 50.94

Y ahí está tu respuesta truncada, ahora para formatear la cadena simplemente haz lo siguiente:

string s = string.Format("{0:N2}%", x); // No fear of rounding and takes the default number format
Kyle Rosendo avatar Mar 16 '2010 11:03 Kyle Rosendo

Lo siguiente redondea los números, pero solo muestra hasta 2 decimales (eliminando los ceros finales), gracias a .##.

decimal d0 = 24.154m;
decimal d1 = 24.155m;
decimal d2 = 24.1m;
decimal d3 = 24.0m;

d0.ToString("0.##");   //24.15
d1.ToString("0.##");   //24.16 (rounded up)
d2.ToString("0.##");   //24.1  
d3.ToString("0.##");   //24

http://dobrzanski.net/2009/05/14/c-decimaltostring-and-how-to-get-rid-of-trailing-zeros/

Brian Ogden avatar Mar 09 '2012 04:03 Brian Ogden

Le sugiero que trunque primero y luego formatee:

double a = 123.4567;
double aTruncated = Math.Truncate(a * 100) / 100;
CultureInfo ci = new CultureInfo("de-DE");
string s = string.Format(ci, "{0:0.00}%", aTruncated);

Utilice la constante 100 para truncar 2 dígitos; use un 1 seguido de tantos ceros como dígitos después del punto decimal desee. Utilice el nombre de la cultura que necesita para ajustar el resultado del formato.

CesarGon avatar Mar 16 '2010 11:03 CesarGon

Lo uso price.ToString("0.00") para obtener los 0 iniciales.

CMS avatar Mar 04 '2015 14:03 CMS