163 votos

C# Doble - ToString() formato con dos decimales pero sin redondeo

¿Cómo puedo dar formato a un Double a un String en C# para tener sólo dos decimales?

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

210voto

Kyle Rozendo Puntos 15606

Uso lo siguiente:

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

Por ejemplo:

Si el número es 50.947563 y usas 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 dar formato a la cadena simplemente haz lo siguiente:

string s = string.Format("{0:N2}%", x); // No fear of rounding and takes the default number format

104voto

Brian Ogden Puntos 1954
decimal d = 0.241534545765;  
decimal d2 = 0.241;  
decimal d3 = 0.2;  

d.ToString("0.##%");        //24.15%  
d2.ToString("0.##%");       //24.1%  
d3.ToString("0.##%");       //20%  

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

35voto

CesarGon Puntos 8710

Sugiero que primero trunque, 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);

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

6voto

maxp Puntos 5053

La función c#, según lo expresado por Kyle Rozendo:

string DecimalPlaceNoRounding(double d, int decimalPlaces = 2)
{
    d = d * Math.Pow(10, decimalPlaces);
    d = Math.Truncate(d);
    d = d / Math.Pow(10, decimalPlaces);
    return string.Format("{0:N" + Math.Abs(decimalPlaces) + "}", d);
}

4voto

Zain Ali Puntos 3813

Esto funciona para mí.

string prouctPrice = Convert.ToDecimal(String.Format("{0:0.00}", Convert.ToDecimal(yourString))).ToString();

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X