c# - 小数点/货币字段的两位小数

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

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

请提出建议。

最佳答案

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

小数位数为 4 而不是 2 的原因是为了保持算术结果的精度。您的普通货币值(value)的标度为 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.

关于c# - 小数点/货币字段的两位小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6075067/

相关文章:

在 32 位和 64 位 Linux 中使用 long 的 C# pInvoke :

c# - 使用WebClient时如何绕过系统代理

c# - 如何在 C# 中将 DataTable 转换为通用列表

c# - 删除客户记录时删除 ASP.NET 用户帐户?

c# - 用于模拟 Facebook SDK 的 JsonObject

entity-framework - Entity Framework 上下文和结构图配置

asp.net-mvc-3 - 如何更改获取数据的 WebGrid 操作 (.NET MVC3)

c# - 延迟加载和 Load() 有什么区别

entity-framework-4 - Entity Framework 中的 T CreateObject<T> 是否也会在创建代理后跟踪更改?

c# - 在 EF4 中更改数据库表名称( Entity Framework 4)