два знака после запятой для десятичного поля / денежного поля - PullRequest
14 голосов
/ 20 мая 2011

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

Пожалуйста, предложите.

Ответы [ 4 ]

18 голосов
/ 20 мая 2011

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

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

Но я отвлекся.

В результате значения money SQL Server, имеющего подразумеваемую шкалу 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

Приветствия

Н. * * тысяча тридцать шесть

6 голосов
/ 20 мая 2011

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

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

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} - это валюта Формат

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

3 голосов
/ 20 мая 2011

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

http://blog.stevex.net/string-formatting-in-csharp/

1 голос
/ 31 августа 2012

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

YourDecField.ToString("N")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...