C #: округленное десятичное число для отображения только в том случае, если десятичная точка равна 0 (например: 3,00 -> 3) - PullRequest
5 голосов
/ 13 декабря 2011

Я храню сумму в десятичном виде (18,2). Но большинство моих данных на самом деле целочисленные, с небольшим десятичным числом. Поэтому, когда я отображаю сумму для каждого элемента в таблице, отображаются все цифры 3,00, 4,00, 5,00 и т. Д.

Мне кажется странным показывать все 0 как десятичную точку. Я хочу отформатировать число при отображении, если десятичная точка равна 0.

В настоящее время я отображаю сумму, подобную этой:

  <td id="amnt@(item.FoodID)" class="amountfield">
      @Html.DisplayFor(modelItem => item.FoodAmount)
  </td>

Есть идеи? Ценю любую помощь ... спасибо ...

Ответы [ 5 ]

14 голосов
/ 13 декабря 2011

Глядя на ваш код, я предполагаю, что вы используете ASP.Net MVC для своего приложения. Вы можете использовать DataAnnotation для форматирования ваших данных.

Вы можете попробовать использовать DisplayFormat в свойстве модели.

[DisplayFormat(DataFormatString = "{0:0.##}")] 
Decimal FoodAmount{ get; set; }
4 голосов
/ 13 декабря 2011

Используйте ToString(string) с пользовательским форматом, используя "#" спецификатор пользовательского формата

item.FoodAmount.ToString("0.##")

Показывает до двух цифр, но пропускает их, если они являются незначимыми нулями.

2 голосов
/ 13 декабря 2011

Может быть, что-то подобное поможет ...

@Html.DisplayFor(modelItem => item.FoodAmount % 1 == 0 ? item.FoodAmount.ToString("F0") : item.FoodAmount.ToString("F2"))

Это должно обеспечить следующие результаты:

FoodAmount | Output
--------------------
 3.00      |  3
 3.01      |  3.01
 3.5       |  3.50

Я специально сжал это в одну строку, чтобы соответствовать вашему Html Helper-коду, но вы можете создать вспомогательный метод / метод расширения для этого, если хотите.

Основная идея состоит в том, чтобы получить остаток от деления на 1. Если результат равен нулю (то есть он может быть разделен на 1 без остатка), то его можно считать целым числом

Альтернатива : Это также вариант, который может улучшить чтение ...

item.FoodAmount.ToString("F2").TrimEnd('0', '.')

Это может даже дать вам лучшие результаты ...

FoodAmount | Output
--------------------
 3.00      |  3
 3.01      |  3.01
 3.5       |  3.5
0 голосов
/ 28 декабря 2015

Это сработало лучше для меня

[Test]
public void DecimalFormatTests()
{
    var amt1 = 1000000m;
    var amt2 = 1000000.10m;

    var format = "0.#";

    Console.WriteLine(amt1.ToString("\\£0,0.#"));
    Console.WriteLine(amt2.ToString("\\£0,0.#"));

}

Выход:

£ 10,00,000
£ 10,00,000.1

0 голосов
/ 31 июля 2014

DataFormatString хорошо работает во ViewModel

Это также добавило бы разделитель тысяч, если необходимо

[DisplayFormat(DataFormatString = "{0:#,##0.##}")]
...