Cuando se muestra el valor de un decimal actualmente con .ToString()
, es preciso que le gusten 15 lugares decimales, y como lo estoy usando para representar dólares y centavos, solo quiero que la salida sea 2 lugares decimales.
¿Utilizo una variación de .ToString()
para esto?
Decimal
andDouble
typeToString
acepta argumentos para formatear. Intente convertir su valor a decimal / doble primero.Sé que esta es una vieja pregunta, pero me sorprendió ver que nadie parecía publicar una respuesta que;
Esto es lo que usaría:
http://msdn.microsoft.com/en-us/library/9s0xa85y.aspx
fuente
Esta voluntad:
23.456
→23.46
23
→23.00
;12.5
→12.50
Ideal para mostrar moneda.
Consulte la documentación en ToString ("F") (gracias a Jon Schneider).
fuente
.
puede ser reemplazado por,
basado en la cultura. Debe pasarCultureInfo.InvariantCulture
como el segundo argumento para deshabilitar esto.Si solo necesita esto para mostrar, use string.
http://www.csharp-examples.net/string-format-double/
La "m" es un sufijo decimal. Sobre el sufijo decimal:
http://msdn.microsoft.com/en-us/library/364x0z75.aspx
fuente
Dado decimal d = 12.345; las expresiones d.ToString ("C") o String.Format ("{0: C}", d) rinden $ 12.35 ; tenga en cuenta que se utiliza la configuración de moneda de la cultura actual, incluido el símbolo.
Tenga en cuenta que "C" utiliza el número de dígitos de la cultura actual. Siempre puede anular el valor predeterminado para forzar la precisión necesaria con me
C{Precision specifier}
gustaString.Format("{0:C2}", 5.123d)
.fuente
Si lo desea formateado con comas, así como un punto decimal (pero sin símbolo de moneda), como 3,456,789.12 ...
fuente
Ya hay dos respuestas de alta puntuación que se refieren a Decimal. Redonda (...) pero creo que se necesita un poco más de explicación, porque hay una propiedad inesperada e importante de Decimal que no es obvia.
Un decimal 'sabe' cuántos decimales tiene en función de su origen.
Por ejemplo, lo siguiente puede ser inesperado:
Hacer las mismas operaciones con
Double
no dará lugares decimales ("25"
) para cada uno de los anteriores.Cuando quieres un decimal a 2 decimales, hay aproximadamente un 95% de posibilidades de que sea porque es moneda, en cuyo caso esto probablemente esté bien el 95% del tiempo:
O en XAML solo usas
{Binding Price, StringFormat=c}
Un caso con el que me encontré donde necesitaba un decimal AS era cuando enviaba XML al servicio web de Amazon. El servicio se quejaba porque un valor decimal (originalmente de SQL Server) se estaba enviando como
25.1200
rechazado, (25.12
era el formato esperado).Todo lo que necesitaba hacer era
Decimal.Round(...)
con 2 decimales para solucionar el problema.TypedValue
es de tipo,Decimal
así que no podía hacerloToString("N2")
y necesitaba redondearlo y mantenerlo comodecimal
.fuente
Aquí hay un pequeño programa de Linqpad para mostrar diferentes formatos:
Aquí están los resultados:
fuente
Método Math.Round (Decimal, Int32)
fuente
Muy raramente querría una cadena vacía si el valor es 0.
La respuesta mejor calificada es incorrecta y ha desperdiciado 10 minutos (la mayoría) del tiempo de las personas.
fuente
"#"
significa dígito de número (si es necesario) (sin relleno si no es necesario)"0"
significa dígito de número (no importa qué) (rellenado con ceros si no está disponible)La respuesta de Mike M. fue perfecta para mí en .NET, pero .NET Core no tiene un
decimal.Round
método al momento de escribir.En .NET Core, tuve que usar:
Un método hacky, que incluye la conversión a cadena, es:
fuente
Ninguno de estos hizo exactamente lo que necesitaba, forzar 2 dp y redondear como
0.005 -> 0.01
Forzar 2 dp requiere aumentar la precisión en 2 dp para garantizar que tengamos al menos 2 dp
luego redondeando para asegurarnos de que no tenemos más de 2 dp
fuente
La respuesta mejor calificada describe un método para formatear la representación de cadena del valor decimal, y funciona.
Sin embargo, si realmente desea cambiar la precisión guardada en el valor real, debe escribir algo como lo siguiente:
Un ejemplo de prueba unitaria:
fuente
Puede usar system.globalization para formatear un número en cualquier formato requerido.
Por ejemplo:
Si tiene un
decimal d = 1.2300000
y necesita recortarlo a 2 decimales, entonces puede imprimirse asíd.Tostring("F2",ci);
donde F2 está formando cadenas a 2 decimales y ci es la configuración regional o información cultural.Para obtener más información, consulte este enlace
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
fuente
https://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx
Este enlace explica en detalle cómo puede manejar su problema y qué puede hacer si desea obtener más información. Por simplicidad, lo que quieres hacer es
si desea esto para una moneda, puede hacerlo más fácil escribiendo "C2" en lugar de "F2"
fuente
fuente
Si necesita mantener solo 2 lugares decimales (es decir, cortar todo el resto de dígitos decimales):
Si necesita mantener solo 3 decimales:
fuente