Il y a déjà deux réponses à haut score qui se réfèrent à Decimal.Round (...) mais je pense qu'un peu plus d'explications sont nécessaires - car il y a une propriété importante inattendue de Decimal qui n'est pas évidente.
Une décimale «sait» combien de décimales elle a en fonction de son origine.
Par exemple, les éléments suivants peuvent être inattendus:
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"
Faire les mêmes opérations avec Double
ne donnera aucune décimale ( "25"
) pour chacun des éléments ci-dessus.
Lorsque vous voulez une décimale à 2 décimales, il y a environ 95% de chance, c'est parce que c'est de la monnaie, auquel cas cela est probablement correct pour 95% du temps:
Decimal.Parse("25.0").ToString("c") => "$25.00"
Ou en XAML, vous utilisez simplement {Binding Price, StringFormat=c}
J'ai rencontré un cas où j'avais besoin d'une décimale AS comme décimale lors de l'envoi de XML au service Web d'Amazon. Le service se plaignait car une valeur décimale (originaire de SQL Server) était envoyée 25.1200
et rejetée ( 25.12
était le format attendu).
Tout ce que je devais faire était Decimal.Round(...)
avec 2 décimales pour résoudre le problème.
// This is an XML message - with generated code by XSD.exe
StandardPrice = new OverrideCurrencyAmount()
{
TypedValue = Decimal.Round(product.StandardPrice, 2),
currency = "USD"
}
TypedValue
est de type Decimal
donc je ne pouvais pas simplement faire ToString("N2")
et je devais l'arrondir et le garder comme decimal
.