80 votos

C# doble - ToString() formateo con dos decimales pero sin redondeo

¿Cómo dar formato a un Double a un String en C # con el fin de tener sólo dos cifras decimales?

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

116voto

Kyle Rozendo Puntos 15606

Utilizo los siguientes:

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

Por ejemplo:

Si el número es 50.947563 y utiliza los siguientes valores, ocurrirá lo siguiente:

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

Y ahí está tu respuesta truncado, ahora para dar formato a la cadena simplemente haga lo siguiente:

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

41voto

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/

24voto

CesarGon Puntos 8710

Te sugiero que trunca primero y luego del formato:

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);

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

4voto

Zain Ali Puntos 3813

Esto funciona para mí

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

4voto

maxp Puntos 5053

La c# función, 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);
}

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