Uso del formato de cadena para mostrar decimales de hasta 2 lugares o números enteros simples
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"
Perdón por reactivar esta pregunta, pero no encontré la respuesta correcta aquí.
Al formatear números, puede utilizarlos 0
como 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 0
con #
.
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)
Una forma poco elegante sería:
var my = DoFormat(123.0);
Con DoFormat
ser 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.
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