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:
Decimal.Parse("25").ToString() => "25"
Decimal.Parse("25.").ToString() => "25"
Decimal.Parse("25.0").ToString() => "25.0"
Decimal.Parse("25.0000").ToString() => "25.0000"
25m.ToString() => "25"
25.000m.ToString() => "25.000"
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:
Decimal.Parse("25.0").ToString("c") => "$25.00"
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.
// This is an XML message - with generated code by XSD.exe
StandardPrice = new OverrideCurrencyAmount()
{
TypedValue = Decimal.Round(product.StandardPrice, 2),
currency = "USD"
}
TypedValue
es de tipo, Decimal
así que no podía hacerlo ToString("N2")
y necesitaba redondearlo y mantenerlo como decimal
.
Decimal
andDouble
typeToString
acepta argumentos para formatear. Intente convertir su valor a decimal / doble primero.