十进制/货币字段的两位小数

时间:2011-05-20 16:40:46

标签: c# asp.net-mvc-3 entity-framework-4

我的数据库中有一个带有money字段的表。我创建了实体并为该货币字段创建了小数属性。当该字段的值显示在我的MVC3视图上时,它在小数点后有四个零0000,如下所示:5489.0000。我想只显示两个00或小数位。我该如何解决呢?为什么它显示四位小数,即使我将属性声明为十进制。

请建议。

4 个答案:

答案 0 :(得分:18)

SQL Server money数据类型内部是一个64位整数,隐含的比例为4位小数。引用联机丛书,它是准确的“至万亿货币单位”。它是decimal(19,4)的粗略等价物。

4而不是2的比例的原因是为了保持算术结果的精确性。您的普通货币值的等级为2(例如3.27美元)乘以或缩放到2位小数的两个数的除法给出精确到4位小数的结果:9.23除以3.27得到2.82262996941896(大约)的结果。您可以将结果带到您想要的准确度(小数位数)。但是,结果只有精确到4位小数(2.8226),因为原始值仅精确到2位小数。该测量精确到指定的最小单位的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

干杯,

<磷>氮

答案 1 :(得分:6)

你必须格式化字符串。

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

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}是货币格式

希望这有帮助!

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

我用过它并且有效:

YourDecField.ToString("N")