Использование формата строки для отображения десятичного числа до 2-х знаков или простого целого числа - PullRequest
250 голосов
/ 05 августа 2011

У меня есть поле цены для отображения, которое иногда может быть либо 100, либо 100,99, либо 100,9. Мне нужно, чтобы цена отображалась в 2 десятичных разрядах, только если для этой цены введены десятичные дроби, например, если ее 100 он должен показывать только 100, а не 100.00, а если цена 100.2, он должен отображать 100.20 аналогично, для 100.22 должно быть одинаковым. Я гуглил и наткнулся на несколько примеров, но они не соответствовали точно тому, что я хотел:

// just two decimal places
String.Format("{0:0.00}", 123.4567);      // "123.46"
String.Format("{0:0.00}", 123.4);         // "123.40"
String.Format("{0:0.00}", 123.0);         // "123.00"

Ответы [ 15 ]

4 голосов
/ 09 сентября 2015

Если ни один из других ответов не работает для вас, это может быть связано с тем, что вы связываете ContentProperty элемента управления в функции OnLoad, что означает, что это не будет работать:

private void UserControl_Load(object sender, RoutedEventArgs e)
{
  Bind.SetBindingElement(labelName, String.Format("{0:0.00}", PropertyName), Label.ContentProperty) 
}

Решение простое: в xaml есть свойство ContentStringFormat. Поэтому, когда вы создаете ярлык, сделайте следующее:

//if you want the decimal places definite
<Label Content="0" Name="labelName" ContentStringFormat="0.00"/>

Или

//if you want the decimal places to be optional
<Label Content="0" Name="labelName" ContentStringFormat="0.##"/>
3 голосов
/ 25 июля 2017

Попробуйте:

String.Format("{0:0.00}", Convert.ToDecimal(totalPrice));
3 голосов
/ 12 января 2014

примерно так тоже будет работать:

String.Format("{0:P}", decimal.Parse(Resellers.Fee)).Replace(".00", "")
2 голосов
/ 06 февраля 2014

Чтобы сделать код более понятным, чем писал Кахия (это понятно, но становится сложнее, когда вы хотите добавить к нему больше текста) ... попробуйте это простое решение.

if (Math.Round((decimal)user.CurrentPoints) == user.CurrentPoints)
     ViewBag.MyCurrentPoints = String.Format("Your current Points: {0:0}",user.CurrentPoints);
else
     ViewBag.MyCurrentPoints = String.Format("Your current Points: {0:0.0}",user.CurrentPoints);

Мне пришлось добавить дополнительное приведение (десятичное), чтобы Math.Round сравнил две десятичные переменные.

1 голос
/ 14 марта 2015

Это сработало для меня!

String amount= "123.0000";
String.Format("{0:0.##}", amount);      // "123.00"
...