C# 小数/货币字段的小数点后两位

C# 小数/货币字段的小数点后两位,c#,asp.net-mvc-3,entity-framework-4,C#,Asp.net Mvc 3,Entity Framework 4,我的数据库中有一个带有money字段的表。我已经为该货币字段创建了实体和十进制属性。当该字段的值显示在我的MVC3视图中时,它在小数点后有四个0 0000,如下所示:5489.0000。我只想显示两个00或小数位。我怎样才能修好它。为什么它显示四位小数,甚至我声明属性为十进制 请提出建议。以下是有关格式化字符串的所有信息 您必须格式化字符串 如果你想展示金钱,你可以做的一件事是: static void Main () { decimal x = 0.999m; decimal

我的数据库中有一个带有money字段的表。我已经为该货币字段创建了实体和十进制属性。当该字段的值显示在我的MVC3视图中时,它在小数点后有四个0 0000,如下所示:5489.0000。我只想显示两个00或小数位。我怎样才能修好它。为什么它显示四位小数,甚至我声明属性为十进制


请提出建议。

以下是有关格式化字符串的所有信息


您必须格式化字符串

如果你想展示金钱,你可以做的一件事是:

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
您的金额=$99999999999999999999.00

{0:C}是货币格式


希望这有帮助

SQL Server
money
数据类型内部是一个64位整数,其隐含小数位数为4位。在网上引用书籍时,它精确到“一个货币单位的万分之几”。它大致相当于一个
十进制(19,4)

采用4而不是2的刻度是为了保持算术结果的精度。您的普通货币值的刻度为2(例如,3.27美元)。将两个数字相乘或相除到小数点后2位,得到的结果精确到小数点后4位:9.23除以3.27得到的结果为2.82262996941896(大约)。您可以将结果精确到所需的任何精度(小数位数)。但是,结果仅精确到小数点后4位(2.8226),因为原始值仅精确到小数点后2位。该测量值精确到规定最小单位(+/-0.005)的1/2以内

但我离题了

由于SQL Server
money
值的隐含小数位数为4,ADO.Net会将该值转换为小数位数为4的System.Decimal。由于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
干杯


N.

我用了这个,它奏效了:

YourDecField.ToString("N")

Hi@Nico:我不想把$和amount放在一起。我如何修改string.format(“{0:C}”,amount)?你可以说decimal dec=5489.0000M;dec.ToString(“0.00”);我使用decimal?和ToString(“0:00”)不能与它一起使用。正文应该告诉.Net运行时。请参阅我原始答案中的示例。格式化DORE在DevXpress组件中不起作用。顺便说一句,这些组件充满了这样的错误。