【问题标题】:two decimal places for decimal/money field小数/货币字段的两位小数
【发布时间】:2011-08-29 19:47:30
【问题描述】:

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

请提出建议。

【问题讨论】:

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


    【解决方案1】:

    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)。

    但我离题了。

    由于 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.

    【讨论】:

    • 我使用的是十进制?和 ToString("0:00) 不能和它一起使用
    • 应该有人告诉 .Net 运行时。请参阅我的原始答案中的示例。
    • 格式化 dores 在 DevExpress 组件中不起作用。顺便说一句,其中充满了这样的错误。
    【解决方案2】:

    你必须格式化字符串。

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

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

    希望这会有所帮助!

    【讨论】:

    • 嗨@Nico:我不想把$和金额放在一起。如何修改 string.format("{0:C}",amount) ?
    • 你可以说十进制 dec = 5489.0000M; dec.ToString("0.00");
    【解决方案3】:

    这是您需要了解的有关格式化字符串的所有信息。

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

    【讨论】:

      【解决方案4】:

      我用过这个,效果很好:

      YourDecField.ToString("N")
      

      【讨论】:

        猜你喜欢
        • 2014-03-25
        • 2016-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-18
        相关资源
        最近更新 更多