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, por lo que solo debería muestre 100 no 100.00 y si el precio es 100.2, debería mostrar 100.20 de manera similar para 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"
c#
regex
string-formatting
number-formatting
Señor a
fuente
fuente
Respuestas:
Una forma poco elegante sería:
Con
DoFormat
ser algo como:No es elegante pero funciona para mí en situaciones similares en algunos proyectos.
fuente
CurrentCulture
, el separador decimal puede no ser.
. A menos queCultureInfo.InvariantCulture
se use constring.Format
, tendría que verificar el valor deCultureInfo.NumberFormat.NumberDecimalSeparator
, y eso sería una verdadera PITA. :)60000
int y quiero que sea60.000
?Perdón por reactivar esta pregunta, pero no encontré la respuesta correcta aquí.
Al formatear números, puede usarlo
0
como un lugar obligatorio y#
como un lugar opcional.Entonces:
También puedes combinar
0
con#
.Para este método de formateo siempre se utiliza
CurrentCulture
. Para algunas culturas.
se cambiará a,
.Respuesta a la pregunta original:
La solución más simple proviene de @Andrew ( aquí ). Así que personalmente usaría algo como esto:
fuente
Este es un caso de uso de número flotante de formato común.
Desafortunadamente, todas las cadenas de formato de una letra incorporadas (por ejemplo, F, G, N) no lograrán esto directamente.
Por ejemplo,
num.ToString("F2")
siempre mostrará 2 decimales como123.40
.Tendrás que usar el
0.##
patrón incluso si se ve un poco detallado.Un ejemplo de código completo:
fuente
Antigua pregunta pero quería agregar la opción más simple en mi opinión.
Sin miles de separadores:
Con miles de separadores:
Lo mismo pero con String.Format :
Si lo necesita en muchos lugares , usaría esta lógica en un método de extensión :
fuente
tratar
fuente
No sé de ninguna manera poner una condición en el especificador de formato, pero puede escribir su propio formateador:
fuente
Aquí hay una alternativa al método de Uwe Keim, que aún mantendría la misma llamada al método:
Con
MyCustomFormat
ser algo como:fuente
CurrentCulture
, el separador decimal puede no serlo.
. A menos queCultureInfo.InvariantCulture
se use constring.Format
, tendría que verificar el valor deCultureInfo.NumberFormat.NumberDecimalSeparator
, que es bastante poco elegante.Código simple de una línea:
fuente
Si su programa necesita ejecutarse rápidamente, llame a value.ToString (formatString) para obtener un rendimiento de formateo de cadenas ~ 35% más rápido en relación con $ "{value: formatString}" y string.Format (formatString, value).
Datos
Código
Código de salida
Referencias
Cadenas de formato numérico personalizado [docs.microsoft.com]
Gráficos Qt Ejemplo de gráfico de barras [doc.qt.io]
fuente
Me temo que no hay un formato integrado que haga esto. Tendrá que usar un formato diferente dependiendo de si el valor es un número entero o no. O siempre formatee a 2 decimales y manipule la cadena después para eliminar cualquier ".00" final.
fuente
Si ninguna de las otras respuestas funciona para usted, puede deberse a que está vinculando
ContentProperty
un control en laOnLoad
función, lo que significa que esto no funcionará:La solución es simple: hay una
ContentStringFormat
propiedad en el xaml. Entonces, cuando cree la etiqueta, haga esto:O
fuente
algo como esto también funcionará:
fuente
Tratar:
fuente
Para que el código sea más claro que Kahia escribió (es claro pero se vuelve complicado cuando quieres agregarle más texto) ... prueba esta solución simple.
Tuve que agregar el elenco adicional (decimal) para que Math.Round compare las dos variables decimales.
fuente
¡Esto funcionó para mí!
fuente
Cuando se trata de decimales que provienen de una base de datos SQL (T-), desea poder convertir decimales anulables y no anulables con x decimales y poder revisar el código fácilmente contra las definiciones de su tabla y, por supuesto, mostrar el número correcto de decimales para el usuario.
Desafortunadamente, Entity Framework no convierte automáticamente algo así como un SQL
decimal(18,2)
en un equivalente .NET con el mismo número de lugares decimales (ya que solo hay un decimal con total precisión disponible). Tienes que truncar los lugares decimales manualmente.Entonces, lo hice de esta manera:
Ejemplo de uso:
fuente