Два десятичных знака для десятичного/денежного поля

У меня есть таблица с денежным полем в моей базе данных. Я создал объект и создал десятичное свойство для этого денежного поля. Когда значение этого поля отображается в представлении My MVC3, оно имеет четыре нуля 0000 после десятичного числа: 5489.0000. Я хочу показать только два 00 или десятичных знаков. Как я могу это исправить. Почему он показывает четыре десятичных знака, даже я объявил свойство десятичным.

Просьба предложить.

Ответ 1

Внутренний тип данных SQL Server money - это 64-разрядное целое число с подразумеваемой шкалой из 4 знаков после запятой. Чтобы процитировать "Книги в Интернете", это точно "десять тысяч тысяч единиц валюты". Это грубый эквивалент a decimal(19,4).

Причиной шкалы 4, а не 2 является сохранение точности результатов арифметики. Ваше обычное значение валюты имеет шкалу в 2 (например, 3,27 долл. США). Умножение или деление двух чисел, масштабированных до 2 десятичных знаков, дает результаты, которые точны до 4 знаков после запятой: 9.23, деленная на 3.27, дает результат 2.82262996941896 (приблизительно). Вы можете переносить результат на любую точность (количество знаков после запятой), которое вы желаете. Однако результат будет точным только до 4 знаков после запятой (2.8226), поскольку исходные значения были точными только до двух знаков после запятой. Это измерение точно в пределах от 1/2 наименьшего указанного устройства (+/- 0,005).

Но я отвлекаюсь.

В результате значения SQL Server money, имеющего подразумеваемый масштаб 4, ADO.Net преобразует значение в System.Decimal со шкалой 4. И так как System.Decimal отслеживает масштаб, когда вы его конвертируете в строку, вы получаете 4 десятичных знака.

Чтобы получить меньше, вы можете

  • Завершить его перед преобразованием, используя соответствующую перегрузку Decimal.Round() или
  • Отформатируйте его по желанию (например. (3.27M).ToString("0.00") ;.

Надеюсь, что это поможет.

Эта программа:

namespace Sandbox
{
  using System ;
  class Program
  {
    static void Main( string[] args )
    {
      decimal pi     = (decimal) Math.PI ;
      string  piText = pi.ToString("0.00");
      Console.WriteLine("PI to 2 decimal places is {0} one way, and {1:0.00} another" , piText , pi ) ;
      return;
    }
  }
}

Производит то, что вы ожидаете:

PI to 2 decimal places is 3.14 one way, and 3.14 another

Приветствия,

Н.

Ответ 2

Вам нужно отформатировать строку.

Одна вещь, которую вы можете сделать, если это деньги, которые вы хотите отобразить:

static void Main () 
{
    decimal x = 0.999m;
    decimal y = 9999999999999999999999999999m;
    Console.WriteLine("My amount = {0:C}", x);
    Console.WriteLine("Your amount = {0:C}", y);
}

}

ВЫВОД: Выход

Моя сумма = $1.00
Ваша сумма = 9 999 999 999 999 999 999 999 999 999,00

{0: C} - формат валюты

Надеюсь, это поможет!

Ответ 4

Я использовал это, и он работал:

YourDecField.ToString("N")