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

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

请建议。

内部的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() ,使用适当的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.

你必须格式化字符串。

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

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

希望这可以帮助!

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

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

我用过这个并且它有效:

 YourDecField.ToString("N")