Уже есть два ответа с высокими оценками, которые относятся к Decimal.Round (...), но я думаю, что требуется немного больше объяснений - потому что есть неожиданное важное свойство Decimal, которое не очевидно.
Десятичное число «знает», сколько десятичных разрядов оно основало на том, откуда оно взято.
Например, следующее может быть неожиданным:
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"
Выполнение тех же операций с Doubleне даст десятичных знаков ( "25") для каждого из вышеперечисленных.
Когда вы хотите, чтобы от десятичного до двух десятичных разрядов, вероятность была около 95%, потому что это валюта, и в этом случае это, вероятно, хорошо для 95% времени:
Decimal.Parse("25.0").ToString("c") => "$25.00"
Или в XAML вы просто используете {Binding Price, StringFormat=c}
Один случай, с которым я столкнулся, когда мне нужно было десятичное число, КАК десятичное число было при отправке XML на веб-сервис Amazon. Служба жаловалась, потому что десятичное значение (первоначально из SQL Server) отправлялось как 25.1200отклоненное ( 25.12был ожидаемый формат).
Все, что мне нужно было сделать, это Decimal.Round(...)2 знака после запятой, чтобы решить проблему.
// This is an XML message - with generated code by XSD.exe
StandardPrice = new OverrideCurrencyAmount()
{
TypedValue = Decimal.Round(product.StandardPrice, 2),
currency = "USD"
}
TypedValueэто тип, Decimalпоэтому я не мог просто сделать ToString("N2")и нужно было округлить его и сохранить его как decimal.