Uso del formato de cadena para mostrar decimales de hasta 2 lugares o números enteros simples

Resuelto Mr A asked hace 13 años • 18 respuestas

Tengo un campo de precio para mostrar que a veces puede ser 100 o 100,99 o 100,9. Lo que quiero es mostrar el precio en 2 decimales solo si los decimales se ingresan para ese precio, por ejemplo, si es 100, entonces solo debería muestre 100, no 100,00 y si el precio es 100,2 debería mostrar 100,20 de manera similar, ya que 100,22 debería ser el mismo. Busqué en Google y encontré algunos ejemplos, pero no coincidían exactamente con lo que quería:

// just two decimal places
String.Format("{0:0.00}", 123.4567);      // "123.46"
String.Format("{0:0.00}", 123.4);         // "123.40"
String.Format("{0:0.00}", 123.0);         // "123.00"
Mr A avatar Aug 05 '11 11:08 Mr A
Aceptado

Perdón por reactivar esta pregunta, pero no encontré la respuesta correcta aquí.

Al formatear números, puede utilizarlos 0como lugar obligatorio y #como lugar opcional.

Entonces:

// just two decimal places
String.Format("{0:0.##}", 123.4567);      // "123.46"
String.Format("{0:0.##}", 123.4);         // "123.4"
String.Format("{0:0.##}", 123.0);         // "123"

También puedes combinar 0con #.

String.Format("{0:0.0#}", 123.4567)       // "123.46"
String.Format("{0:0.0#}", 123.4)          // "123.4"
String.Format("{0:0.0#}", 123.0)          // "123.0"

Para este formato siempre se utiliza el método CurrentCulture. Para algunas culturas .se cambiará a ,.

Respuesta a la pregunta original:

La solución más sencilla proviene de @Andrew ( aquí ). Entonces yo personalmente usaría algo como esto:

var number = 123.46;
String.Format(number % 1 == 0 ? "{0:0}" : "{0:0.00}", number)
Gh61 avatar Feb 13 '2014 10:02 Gh61

Una forma poco elegante sería:

var my = DoFormat(123.0);

Con DoFormatser algo como:

public static string DoFormat( double myNumber )
{
    var s = string.Format("{0:0.00}", myNumber);

    if ( s.EndsWith("00") )
    {
        return ((int)myNumber).ToString();
    }
    else
    {
        return s;
    }
}

No es elegante pero trabaja para mí en situaciones similares en algunos proyectos.

Uwe Keim avatar Aug 05 '2011 04:08 Uwe Keim

Este es un caso de uso común de formato de números flotantes.

Desafortunadamente, todas las cadenas de formato de una letra integradas (por ejemplo, F, G, N) no lograrán esto directamente.
Por ejemplo, num.ToString("F2")siempre mostrará 2 decimales como 123.40.

Tendrás que usar 0.##un patrón incluso si parece un poco detallado.

Un ejemplo de código completo:

double a = 123.4567;
double b = 123.40;
double c = 123.00;

string sa = a.ToString("0.##"); // 123.46
string sb = b.ToString("0.##"); // 123.4
string sc = c.ToString("0.##"); // 123
detale avatar Oct 18 '2015 06:10 detale