¿Existe un formateador de pantalla que genere decimales como estas representaciones de cadena en c # sin hacer ningún redondeo?
// decimal -> string
20 -> 20
20.00 -> 20
20.5 -> 20.5
20.5000 -> 20.5
20.125 -> 20.125
20.12500 -> 20.125
0.000 -> 0
{0. #} se redondeará y el uso de alguna función de tipo de recorte no funcionará con una columna numérica enlazada en una cuadrícula.
c#
formatting
decimal
JC.
fuente
fuente
"0.0#"
.Acabo de aprender a utilizar correctamente el
G
especificador de formato. Consulte la documentación de MSDN . Hay una nota un poco más abajo que indica que los ceros finales se conservarán para los tipos decimales cuando no se especifique precisión. No sé por qué harían esto, pero especificar el número máximo de dígitos para nuestra precisión debería solucionar ese problema. Entonces, para formatear decimales,G29
es la mejor opción.fuente
Este formato de cadena debería hacer su día: "0. ###########################". Sin embargo, tenga en cuenta que los decimales pueden tener como máximo 29 dígitos significativos.
Ejemplos:
fuente
Esta es otra variación de lo que vi arriba. En mi caso, necesito conservar todos los dígitos significativos a la derecha del punto decimal, lo que significa eliminar todos los ceros después del dígito más significativo. Solo pensé que sería bueno compartirlo. Sin embargo, no puedo dar fe de la eficiencia de esto, pero cuando intentas lograr la estética, ya estás condenado a las ineficiencias.
Eso es todo, solo quería tirar mis dos centavos.
fuente
strValue.TrimEnd('0').TrimEnd('.')
lugar delEndsWith
cheque?Otra solución, basada en la respuesta de dyslexicanaboko , pero independiente de la cultura actual:
fuente
Método de extensión:
Código de ejemplo:
Salida:
fuente
IndexOf
para buscar caracteres dentro de una cadena. Es bastante fácil ajustar el ejemplo para resolver el problema sin decimales.No creo que sea posible de inmediato, pero un método simple como este debería hacerlo
fuente
Es bastante fácil de hacer de inmediato:
que eliminará todos los ceros finales de su decimal.
Lo único que debe hacer es agregar
.ToString().TrimEnd('0','.');
a una variable decimal para convertir aDecimal
en aString
sin ceros finales, como en el ejemplo anterior.En algunas regiones debería ser un
.ToString().TrimEnd('0',',');
(donde usan una coma en lugar de un punto, pero también puede agregar un punto y una coma como parámetros para estar seguro).(también puede agregar ambos como parámetros)
fuente
params
argumento, no es necesario que construya una matriz explícitamente. Entonces, en lugar de lo detalladoTrimEnd("0".ToCharArray())
, podría simplemente escribirTrimEnd('0')
(nota: pasó solo enchar
lugar de achar[]
).char
, no astring
(por lo tanto: comillas simples, no comillas dobles). Lo arreglé para ti, espero que no te importe.fuente
Terminé con el siguiente código:
fuente
Terminé con esta variante:
Ventajas:
puede especificar el número máximo de dígitos significativos después del punto para mostrar en tiempo de ejecución;
puede especificar explícitamente un método redondo;
puedes controlar explícitamente una cultura.
fuente
Puedes crear un método de extensión
fuente
Hice los siguientes métodos de extensión para que se ajustaran a uno de mis proyectos, pero tal vez sean beneficiosos para otra persona.
Aunque requerirá una referencia a
System.Numerics
.fuente