2011-05-20 53 views
11

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

请建议。

回答

16

SQL Server money数据类型内部是一个64位整数,隐含小数位数为4位。引用联机丛书,准确的说是“货币单位的万分之一”。它大致相当于decimal(19,4)

4的尺度而不是2的原因是保持算术结果的精度。您的普通货币值为2(例如3.27美元)。两个数字的乘积或除法缩放至小数点后两位,得出精确到​​小数点后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 

干杯,

N.

+1

我正在使用小数?和ToString(“0:00)不能用于它 – DotnetSparrow 2011-05-20 17:51:59

+0

有人应该告诉.Net运行时。请参阅我原始答案中的示例 – 2011-05-20 18:49:29

+0

Formating dores在DevExpress组件中不起作用,其中包含诸如此类的错误。 – f470071 2015-10-02 11:46:22

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); 
} 

}

OUTPUT: 输出

我金额= $ 1.00包装
你的金额= $ 9,999,999,999,999,999,999,999,999,999.00

{0:C}是货币格式

希望这有助于!

+0

Hi @Nico:我不想把金额与$放在一起。如何修改string.format(“{0:C}”,amount)? – DotnetSparrow 2011-05-20 17:06:33

+0

你可以说十进制十进制= 5489.0000M; dec.ToString(“0.00”); – NicoTek 2011-05-20 19:34:23

0

我用这个和它的工作:

YourDecField.ToString("N")